13.异常、IO流、序列化和反序列化

异常

概念

程序在编译或运行的过程中,可能会发生的问题,称为异常。

作为程序员应该要提前预料这个异常的发生情况,尽早把异常情况排除、捕获。

java中的异常体系

Throwable 是异常体系的最顶层的结构,所有异常子类或错误类都是它的子系。

--Error 错误类,一般都是一些严重的问题,程序员无法处理的,比如,栈溢出错误。

--Exception 异常类

--RuntimeException 运行时异常,需要程序员修改代码

--非RuntimeException 非运行时异常(检查异常),必须要处理,否则编译不通过。

常见的运行时异常

运行时异常特点:Java编译器不会检查它,在程序运行的时候才可能出现的问题。

ClassCastException类型转换异常、IndexOutOfBoundsException下标边界异常、

NullPointerException空指针异常、ArithmeticException算术异常、

NoSuchMechanismException

非运行时异常

非运行时异常,从语法角度看是必须要处理的异常,如果不处理,编译不通过

IOException、SQLException

Java中处理异常

使用try、catch、throw、throws、finally来处理异常

1.使用throws抛出异常:将异常通过throws声明在方法体上。

2.使用try...catch...finally捕获异常

写法:

try{

代码块

}catch(Exception e){

如果发生异常,被捕获后,执行下这里的代码

}finally{

不管是否发生异常,这里的代码都会执行

}


package exception;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.InputMismatchException;
import java.util.Scanner;

public class ExceptionDemo01 {
    public static void main(String[] args) throws ParseException {
        //让用户输入两个数值,给他们做除法,计算他们的商
        Scanner scanner = new Scanner(System.in);
        try {
            System.out.println("请输入数值一:");
            int i1 = scanner.nextInt();
            System.out.println("请输入数值二:");
            int i2=scanner.nextInt();

            System.out.println("两个数值做除法的结果是:"+(i1/i2));
        }catch(InputMismatchException in){
            System.err.println("输入的内容不正确,发生异常!");
        }catch (ArithmeticException a){
            System.err.println("输入的除数不能为0,发生异常!");
        } catch(Exception e){
            System.err.println("出现异常,输入的内容不正确,或者除数为0!");
            //e.printStackTrace();
        }finally {
            System.out.println("感谢使用本程序!");
        }


        //        Scanner scanner = new Scanner(System.in);
        //        System.out.println("请输入数值一:");
        //
        //        if (scanner.hasNextInt()){  //如果之前输入的是整数
        //            int i1 = scanner.nextInt();
        //            System.out.println("请输入数值二:");
        //            int i2=scanner.nextInt();   //再输入第二个值
        //            if (i2==0){
        //                System.out.println("除数为0,程序结束");
        //                System.exit(1);
        //            }
        //            System.out.println("两个数值做除法的结果是:"+(i1/i2));
        //            System.out.println("程序结束,感谢使用!");
        //        }else {
        //            System.out.println("输入的数值不是整数,程序结束");
        //            System.exit(1);
        //        }



        //        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //        sdf.parse("");//Unhandled exception: java.text.ParseException非运行时异常

    }
}
特点

1.try块是必须的,后面跟上catch块或finally块中的任意一个就可以

2.catch块可以有一个或多个,如果有多个,第一个catch中的异常类型要比后面的小,或者是不同

3.如果try类中异常没有catch捕获,那么还是会执行finally中内容,并且将异常在控制台输出

try...catch...finally中return的使用

1.在try中和catch中出现

程序正常结束,返回try中的return的值

程序异常结束,返回catch中的return的值

2.在try中和finally中出现

程序正常结束和异常结束都会返回finally中的return值

3.在try中、catch中、finally中都出现

程序正常结束,返回try中和finally中的return的值

程序异常结束,返回catch中和finally中的return的值

程序正常结束和异常结束都会返回finally中的return值

4.在try中和try外面出现

程序正常结束,返回try中的return的值

程序异常结束,返回try外面的return的值

在finally中,返回值可能会影响最终的结果

package exception;

import java.util.Scanner;

public class ExceptionDemo02 {
    public static void main(String[] args) {

    }
    public static int getNum(){

        //在finally中,返回值可能会影响最终的结果
        try {
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入数值一:");
            int i1 = scanner.nextInt();
            System.out.println("请输入数值二:");
            int i2=scanner.nextInt();

            return i1/i2;
        } catch (Exception e) {
            //           e.printStackTrace();
            System.err.println("发生异常");
            //            return 5;
        } finally {
            return 10;
        }
        //        return 0;
    }
}

throws的使用

将异常通过throws声明在方法体上

起到的作用是,告诉将来的使用者,这个方法使用的时候,可能会出现异常

作为调用者;

1.将方法出现的异常,继续抛出,不做解决

2.将方法可能出现的异常捕获,自己做处理

package exception;

import java.util.Scanner;

public class ExceptionDemo03 {
    public static void main(String[] args) {
        try {
            getNum();
        } catch (Exception e) {
            //对于异常情况的处理

        }
    }

    //将异常通过throws声明在方法体上
    //起到的作用是,告诉将来的使用者,这个方法使用的时候,可能会出现异常
    //作为调用者;
    //1.将方法出现的异常,继续抛出,不做解决
    //2.将方法可能出现的异常捕获,自己做处理
    public static void getNum() throws Exception{
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数值一:");
        int i1 = scanner.nextInt();
        System.out.println("请输入数值二:");
        int i2=scanner.nextInt();
        System.out.println("两个数值做除法的结果是:"+(i1/i2));
    }
}

throw的使用

throw声明在方法内部,不能单独使用,需要配合其他关键字一起使用

throw执行后,它后面的语句不再执行,程序会转向调用者,寻找是否存在对应的catch语句,执行相应的异常处理,如果没有catch,会再继续向上找调用者,看看有没有throws,直到最终程序异常终止,并提示异常信息。

package exception;

public class Person {
    String name;
    String gender;

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) throws Exception {
        if (gender.equals("男") || gender.equals("女")){
            this.gender = gender;
        }else {
            throw new Exception("性别必须是男或者女");
        }

    }

}
package exception;

public class PersonDemo {
    public static void main(String[] args) throws Exception {
        Person person = new Person();
        person.setGender("妖");

    }
}

throw和throws的区别

1.throws用来声明一个方法中,可能会抛出的所有异常信息

表示出现异常的一种可能性,但是并不一定会发生异常

throw则是抛出的一个具体的异常类型,如果throw执行了,则一定会抛出某种异常对象

2.throws一般在方法体上声明抛出的异常,

throw则是在方法内部声明一个具体的异常信息

3.throws不用显式的捕获异常,可以继续往上抛

throw则是需要使用者自己捕获相关异常

自定义异常

自定义异常,需要继承异常类,自定义一个构造方法,将异常通过super传递到父类中

package exception;
/*
自定义异常,需要继承异常类,自定义一个构造方法
将异常通过super传递到父类中
 */
public class GenderException extends Exception{
    public GenderException(String message){
        super(message);
    }

}

IO流

IO ==> Input、Output

IO流就是输入输出流,平时声明变量、对象、集合中存储的数据都是暂时的,程序结束后,数据就消失了。

为了将数据持久化的存储,可以通过IO流技术,将数据保存在文本中或者其他的二进制文件中。

Input输入:将数据从各种输出设备(文件、键盘)读取到内存中

Output输出:将数据写入到输出设备中(文件、显示器、磁盘)

Java中IO流的分类

按照流的方向:输入流和输出流

按照流的单位:字节流和字符流

按照功能划分:节点流和处理流

Java中的系统流

Java程序运行的时候都带有一个系统流,对应的类是java.lang.System

System类中,封装了运行时的3个系统流:in、out、err

System.in:标准输入流,从键盘读取

System.out:标准输出流,输出设备默认是控制台

System.err:标准错误流,输出设备控制台

File类

File类中提供了一些文件、目录相关的操作方法

构造方法

File(String pathname)

通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。

普通方法

boolean createNewFile()

当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。

boolean delete()

删除由此抽象路径名表示的文件或目录。

boolean exists()

测试此抽象路径名表示的文件或目录是否存在。

String getAbsolutePath()

返回此抽象路径名的绝对路径名字符串。

String getName()

返回由此抽象路径名表示的文件或目录的名称。

String getPath()

将此抽象路径名转换为路径名字符串。

boolean isDirectory()

测试此抽象路径名表示的文件是否为目录。

boolean isFile()

测试此抽象路径名表示的文件是否为普通文件。

boolean mkdir()

创建由此抽象路径名命名的目录。

long length()

返回由此抽象路径名表示的文件的长度。

package com.day13.file;

import java.io.File;
import java.io.IOException;

public class FileDemo {
    public static void main(String[] args) throws IOException {
        //创建File对象
        //File(String pathname)
        // 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
        File file = new File("D:\\hello\\hello.txt");
        //boolean    exists()
        //测试此抽象路径名表示的文件或目录是否存在。
        if (file.exists()){
            System.out.println("该文件存在");
            //boolean    delete()
            //删除由此抽象路径名表示的文件或目录。
            file.delete();
            System.out.println("文件已删除");
        }else {
            System.out.println("文件不存在,马上创建...");
            //boolean    createNewFile()
            //当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
            file.createNewFile();
            System.out.println("文件创建成功");
        }

        //String     getAbsolutePath()
        //返回此抽象路径名的绝对路径名字符串。
        System.out.println(file.getAbsoluteFile());
        //String     getName()
        //返回由此抽象路径名表示的文件或目录的名称。
        System.out.println(file.getName());
        //String     getPath()
        //将此抽象路径名转换为路径名字符串。
        System.out.println(file.getPath());
        //boolean    isDirectory()
        //测试此抽象路径名表示的文件是否为目录。
        System.out.println(file.isDirectory());
        //boolean    isFile()
        //测试此抽象路径名表示的文件是否为普通文件。
        System.out.println(file.isFile());
        //boolean    mkdir()
        //创建由此抽象路径名命名的目录。
        File file1 = new File("D:\\hello\\java");
        boolean b = file1.mkdir();
        if (b){
            System.out.println("目录创建成功!");
        }
        //long       length()
        //返回由此抽象路径名表示的文件的长度。
        System.out.println(file.length());
    }
}

IO流使用

流向划分:

输入流:InputStream / Reader

输出流:OutputStream / Writer

单位划分:

字节流:InputStream / OutputStream

字符流:Reader / Writer

InputStream使用

InputStream是一个抽象类,将来一般用它的子类来操作

常用的子类

ByteArrayInputStream:将字节数组转为字节输入流,并读取数据

FileInputStream:从文件中读取数据

ObjectInputStream:对象输入流,将对象反序列化

PipedInputStream:管道输入流

FileInputStream使用

构造方法

FileInputStream(File file)

通过打开与实际文件的连接创建一个 FileInputStream,该文件由文件系统中的 File对象 file命名。

FileInputStream(String name)

通过打开与实际文件的连接来创建一个 FileInputStream,该文件由文件系统中的路径名 name命名。

普通方法

int read()

从该输入流读取一个字节的数据。

package com.day13.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputStreamDemo {
    public static void main(String[] args) {
        //创建FileInputStream对象

        FileInputStream fis1 = null;
        try {
            fis1 = new FileInputStream(new File("D:\\hello\\hello.txt"));
            //FileInputStream fis2 = new FileInputStream("D:\\hello\\hello.txt");

            //调用方法,读取文件内容,读取的内容是字符的int表示
            //需要强制及转换成char
            /*
        int i = fis1.read();
        System.out.println((char)i);
        int i1 = fis1.read();
        System.out.println((char)i1);
        int i2 = fis1.read();
        System.out.println((char)i2);
         */
            int i;//接受读取内容的值
            while ((i=fis1.read()) != -1){
                System.out.print((char)i);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                if (fis1 != null){ //防止空指针异常
                    fis1.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

OutputStream使用

常用的子类

ByteArrayOutputStream:向内存缓冲区的字节数组写数据

FileOutputStream:向文件中写数据

ObjectOutputStream:将对象序列化

PipedOutputStream:管道输出流

FileOutputStream使用

构造方法

FileOutputStream(File file)

创建文件输出流以写入由指定的 File对象表示的文件。

FileOutputStream(String name)

创建文件输出流以指定的名称写入文件。

普通方法

void write(int b)

将指定的字节写入此文件输出流。

void write(byte[] b)

将 b.length个字节从指定的字节数组写入此文件输出流。

void write(byte[] b, int off, int len)

将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。

package com.day13.file;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamDemo {
    public static void main(String[] args) {
        FileOutputStream fos=null;
        try {
            //创建FileOutputStream对象
            fos = new FileOutputStream("D:\\hello\\hello.txt");

            String s="helloworld";

            //把字符串转为字节数组
            byte[] bytes = s.getBytes();
            //调用write方法写内容
            fos.write(bytes,0, bytes.length);

            System.out.println("文件写入成功!");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

Reader类

常用的子类

BufferedReader :为其它的字符输入流提供读的缓冲区

CharArrayReader :将字符数组转为字符输入流,读取内容

InputStreamReader :将字节输入流转为字符输入流,可以指定编码格式

PipedReader :管道字符输入流,连接PipedWriter

StringReader :将字符串转为字符输入流,读取内容

FileReader的使用:文件字符输入流

构造方法

FileReader(File file)

创建一个新的 FileReader ,给出 File读取。

FileReader(String fileName)

创建一个新的 FileReader ,给定要读取的文件的名称。

package com.day13.file;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileReaderDemo {
    public static void main(String[] args) {
        //创建FileReader对象
        try {
            FileReader fr = new FileReader("D:\\helllo\\hello.txt");

            //调用read方法,读出每个字符,并转为char类型
//            int i;
//            while ((i= fr.read(chars))!=-1){
                System.out.println((char)i);

            //创建一个字符缓冲区,字符数组,将内容读在字符数组中
            char[] chars = new char[1024];

            //将内容读到字符数组中
            fr.read(chars);
            //将字符数组转为字符串
            String s = new String(chars);
            System.out.println(s.trim());

            //将字符数组放入StringBuffer
            StringBuffer sbf = new StringBuffer();
            sbf.append(chars);
            String s1 = sbf.toString();
            System.out.println(s1.trim());
        }catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用FileReader和BufferedReader 读取文件

package com.day13.file;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;

/**
 * 使用FileReader和BufferedReader 读取文件
 *
 * String readLine()
 * 读一行文字。
 */
public class FileReaderDemo02 {
    public static void main(String[] args) throws Exception {
        //BufferedReader可以作为别的输入流的读缓冲区
        FileReader fr = new FileReader("D:\\hello\\hello.txt");
        BufferedReader br = new BufferedReader(fr);

        //调用方法读取数据,每次读取一行内容
        String line;
        while ( (line = br.readLine()) != null){
            System.out.println(line);
        }
        br.close();
        fr.close();
    }
}

Writer类:字符输出流类父类

常用的子类

BufferedWriter:提供写的缓冲区

CharArrayWriter:向字符数组写数据

OutputStreamWriter:将字节输出流转为字符输出流 ,写内容

StringWriter:向内存缓冲区的字符串写数据

FileWriter的使用:文件字符输入流

构造方法

FileWriter(File file)

给一个File对象构造一个FileWriter对象。

FileWriter(String fileName)

构造一个给定文件名的FileWriter对象。

package com.day13.file;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterDemo {
    public static void main(String[] args) throws IOException {
        //创建FileWriter对象
        FileWriter fw = new FileWriter("D:\\hello\\hello.txt");
        //直接将要传入的内容写入方法中
        fw.write("大家好");
        fw.write("\n");  //换行符,手动换行
        fw.write("我在学习IO流");
        fw.flush();  //刷新流

        fw.close();
    }
}

FileWriter 和 BufferedWriter 完成内容写入

package com.day13.file;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

/**
 * FileWriter 和 BufferedWriter 完成内容写入
 */
public class FileWriterDemo02 {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("D:\\hello\\hello.txt");
        BufferedWriter bw = new BufferedWriter(fw);

        bw.write("大家好");
        bw.newLine();//自动换行
        bw.write("我在学习io流!");
        bw.flush();

        bw.close();
        fw.close();
    }
}

练习:使用Reader和Writer实现文件的复制,将a文件内容读取到b文件中

package com.day13.file;

import java.io.*;

/*
使用Reader和Writer实现文件的复制,将a文件内容读取到b文件中
 */
public class Demo {
    public static void main(String[] args) throws Exception {
        FileReader fr = new FileReader("D://xiaoshuo//hello.txt");
        BufferedReader br = new BufferedReader(fr);

        File file = new File("D://xiaoshuo//world.txt");
        file.createNewFile();

        FileWriter fw = new FileWriter("D://xiaoshuo//world.txt");
        BufferedWriter bw = new BufferedWriter(fw);

        //调用方法读取数据
        String line;
        while ( (line = br.readLine()) != null){
            bw.write(line);
            bw.newLine();
        }
        bw.flush();
        br.close();
        fr.close();
    }
}

Java中编码格式问题

Java中常用编码格式:UTF-8,ISO8859-1,GBK

ISO8859-1:单字节编码,只能表示0-255的字节范围

GBK:可以看成是记事本中ANSI格式,中文国标编码,用来表示汉字

双字节编码,可以表示简体中文和繁体中文

GBK2312只能表示简体中文

UTF:UTF兼容ISO8859-1编码,可以用来表示所有语言字符,UTF编码是不定长编码,

每个字符的长度可能是1-6个字节不等,一般中文网页中使用此编码格式

Unicode:是一种编码规范 ,为了解决全球字符通用编码而设计的,UTF-8,UTF-16

都是此规范的一种实现

如果程序的处理不好编码格式,可能会出现乱码问题

package com.day13.file;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;

/*
关于读取内容乱码的问题
 */
public class InputStreamDemo {
    public static void main(String[] args) throws Exception {
        //创建BufferedReader对象
        FileInputStream fis = new FileInputStream("D://hello//hello.txt");
         //创建InputStreamReader对象,同时指定编码格式
        InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
       
        BufferedReader br = new BufferedReader(isr);

        String line = null;
        while ((line=br.readLine()) != null){
            System.out.println(line);
        }
        br.close();
        isr.close();
        fis.close();
    }
}

序列化和反序列化

序列化

将Java中的对象写入文件的过程,就称为序列化。

反序列化

将Java中的对象文件,从磁盘读回程序中,转为对象,这个过程称为反序列化。

作用

序列化,可以方便持久化存储和网络传输。

反序列化,可以在传递保存对象的时候,保证对象的完整性和可传递性。

Serializable接口

Java中,如果想要某个对象可以被序列化,必须要实现Serializable这个接口。

package com.day13.serial;

import java.io.Serializable;

public class Student implements Serializable {
    private String name;
    private int age;
    private String gender;

    public Student() {
    }

    public Student(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Student{" +
        "name='" + name + '\'' +
        ", age=" + age +
        ", gender='" + gender + '\'' +
        '}';
    }
}
package com.day13.serial;

import java.io.*;

public class StudentDemo {
    public static void main(String[] args) throws Exception {
        //序列化和反序列化

        //创建一个ObjectOutputStream对象
        ObjectOutputStream oos = new ObjectOutputStream(
            new FileOutputStream("D://hello//student.txt"));

        //创建Student对象
        Student s1 = new Student("jack", 20, "男");
        System.out.println(s1);

        //调用方法,完成对象的序列化
        oos.writeObject(s1);
        System.out.println("对象序列化完成");

        //创建一个ObjectInputStream对象
        ObjectInputStream ois = new ObjectInputStream(
            new FileInputStream("D://hello//student.txt"));
        //读回对象的方法
        Object o = ois.readObject();
        Student s =(Student) o;
        System.out.println(s);

        System.out.println(s==s1);//false

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/584805.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

9.【Linux】(死锁问题||线程同步||条件变量||生产者消费者模型)

常见锁的概念 死锁 死锁是指在一组进程中各个进程均占有不会释放的资源,但因互相申请被其他进程所占用的不会释放的资源而处于一种永久等待的状态。简单来说就是两个线程都 在等待对方释放锁。 死锁必要条件 必须同时满足四个条件才会产生死锁 1.互斥条件&…

等级保护测评试题上

一、单选题 1、下列不属于网络安全测试范畴的是(C) A.结构安全 B.便捷完整性检查 C.剩余信息保护 D.网络设备防护 2、下列关于安全审计的内容说法中错误的是(D) A.应对网络系统中的网络设备运行情况、网…

陪玩线下找搭子交友小程序开源版开发

陪玩线下找搭子交友小程序开源版开发 模式是一种线上预约、线下体验的多元化社交平台。 范围广泛,包括电竞陪练、户外运动陪伴、音乐艺术交流、旅游伴游、生活技能指导等,覆盖电竞、运动、音乐、游戏、旅游、文化、艺术、学习等多个领域。 无论是亲子互…

最新游戏陪玩语音聊天系统3.0商业升级独立版本源码+搭建教程

首发价值29800元的最新商业版游戏陪玩语音聊天系统3.0商业升级独立版本源码。 下 载 地 址 : runruncode.com/php/19748.html 1. 新增人气店员轮播功能。 2. UI界面优化,包括游戏图标展示和分类展示的改进。 3. 增加动态礼物打赏功能。 4. 新增礼…

分布式与一致性协议之CAP和Paxos算法(一)

CAP 理论 如何使用BASE理论 以InfluxDB系统中DATA节点的集群实现为例。DATA节点的核心功能是读和写,所以基本可用是指读和写的基本可用。我们可以通过分片和多副本实现读和写的基本可用。也就是说,将同一业务的数据先分片,再以多份副本的形…

录屏功能怎么打开?这3个小技巧你得学会

当我们在使用电子设备时,您是否也想将屏幕上的精彩内容分享给他人,又或者想要记录自己的操作步骤。这时,录屏功能就显得尤为重要。那么,录屏功能怎么打开? 接下来,我将为大家详细介绍3种常见的打开录屏功能…

vue知识

一、初始vue Vue核心 Vue简介 初识 (yuque.com) 1.想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象 2.root容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法 3.root容器里的代码被称为【Vue模板】 4.Vue实例和容器…

关于远程桌面与3389端口的深度解析

当我们谈论远程桌面和3389端口时,我们实际上是在探讨Windows操作系统的一个核心功能,该功能允许用户通过网络从任何地点远程控制和管理计算机。而3389端口,正是这一功能所依赖的通信端口。 一、远程桌面的工作原理 远程桌面协议(R…

gateway全局token过滤器

添加gateway依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>创建一个tokenFilter 实现全局过滤器GlobalFilter,并且实现fitler方法 Value("${…

qt5-入门-2D绘图-基础

参考&#xff1a; QPainter_w3cschool https://www.w3cschool.cn/learnroadqt/k7zd1j4l.html C GUI Programming with Qt 4, Second Edition 本地环境&#xff1a; win10专业版&#xff0c;64位&#xff0c;Qt 5.12 代码已经测试通过。其他例子日后更新。 目录 基础知识penb…

场外期权交易合法吗?参与场外期权交易需要符合哪些规定?

场外期权交易是合法的金融交易方式&#xff0c;且得到了相应监管部门的支持和规范。它是一种新型的期权交易方式&#xff0c;具有灵活性高、可以满足特定投资者需求的特点。 文章来源/&#xff1a;股指研究院 场外期权是私下协商的&#xff0c;交易双方可根据个人预期、风险承…

《QT实用小工具·四十八》趣味开关

1、概述 源码放在文章末尾 该项目实现了各种样式的趣味开关&#xff1a; 1、爱心形状的switch开关&#xff0c;支持手势拖动、按压效果 2、线条样式的3种开关 项目demo演示如下所示&#xff1a; 使用方式&#xff1a; 1、sapid_switch文件夹加入工程&#xff0c;.pro文件中…

二、VLAN原理和配置

vlan不是协议&#xff0c;是一个技术&#xff0c;虚拟局域网技术&#xff0c;基于802.1q协议。 vlan&#xff08;虚拟局域网&#xff09;&#xff0c;将一个物理的局域网在逻辑上划分成多个广播域的技术。 目录 1.冲突域和广播域 概念 范围 2.以太网帧格式 3.以太网帧封装…

【小程序逆向专栏】某润选房小程序逆向分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未…

【YesPMP】平台最新外包项目,设计、小程序、网站等你来接!

YesPMP平台目前最新项目&#xff0c;有感兴趣的用户&#xff0c;可查看项目参与竞标&#xff0c;免费接单&#xff0c;竞标后由项目方直接与服务商联系&#xff0c;双方直接对接。 1.查看项目&#xff1a;网站网页或pc软件 2.查看项目&#xff1a;数据 …

天冕科技亮相第十七届深圳国际金融博览会!

第十七届深圳国际金融博览会在深圳会展中心正式开幕&#xff0c;天冕科技跟随南山区组团集体亮相&#xff0c;充分展现金融活力。此次金博会&#xff0c;南山区政府共遴选了包括天冕科技在内的三家优秀金融科技企业组团参展&#xff0c;以特色与创新的案例展示了辖区金融业发展…

Ansible-Tower安装破解

主机IP地址版本Ansible192.168.169.2042.9.1Tower192.168.169.2043.6.2 基础环境 systemctl disable firewalld --now && setenforce 0 sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config mv /etc/yum.repos.d/CentOS-* /tmp/ curl -o /etc/yum.repo…

AI时代来临,电子行业暗藏新机遇!新人如何逆袭,成为行业翘楚?

随着人工智能技术的飞速发展&#xff0c;程序员的工作正迎来前所未有的变革。去年9月&#xff0c;《大西洋月刊》上的一篇文章&#xff0c;由Kelli Mara Korducki所著&#xff0c;直言不讳地指出&#xff1a;“在人工智能时代&#xff0c;计算机科学已不再是那个稳妥的专业选择…

速成python

一个只会c的苦手来总结一下py的语法。没有其他语法基础的不建议看 1. 输入输出 print自带换行&#xff0c;可以写print("Hi", end"")取消换行 a input(你好:) # 默认是str print(type(a)) # 输出a的类型 a int(input()) # 或者a int(a) print(type(…

Vue.js 3 应用开发与核心源码解析 阅读笔记

https://www.dedao.cn/ebook/reader?idV5R16yPmaYOMqGRAv82jkX4KDe175w7xRQ0rbx6pNgznl9VZPLJQyEBodb89mqoO 2022年出的书&#xff0c;针对Vue的版本是3.2.28&#xff0c;当前的版本是 3.4.21。 本书的一大特色是对Vue 3.x的核心源码&#xff08;响应式原理、双向绑定实现、虚…
最新文章