美文网首页
java后端学习笔记-狂神学徒

java后端学习笔记-狂神学徒

作者: ios周周 | 来源:发表于2021-03-23 16:18 被阅读0次

    最新进度2021/03/25 学完网络编程,正在学多线程
    java学习笔记
    1 在操作系统之上增加了一个抽象层JVM,来实现跨平台性,只要安装了这个JVM,就可以运行java程序
    2 三高:高可用,高性能,高并发
    3 /**开头的是文档注释
    4 字符类型char占2个字节
    5 布尔类型占1位。
    6 初始化long类型的时候,需要在数字后面加个L,例如long num4 = 30L;
    7 初始化float类型的时候,需要在小数最后加个F,以区分float和double类型
    8 引用类型:类,接口,数组
    9 整数赋值:0开头表示8进制,0b开头表示二进制,0x开头表示16进制
    10 float类型是有限的,离散的,有舍入误差的,大约的意思,接近但不等于
    11 基于第10点,最好完全避免使用浮点数进行比较。银行业务表示钱,不能用浮点数,要用BigDecimal
    12 所有的字符本质上还是数字,java使用Unicode表示字符
    13 由于java是强类型语言,所以进行有些运算的时候,需要用到类型转换。
    14 把高容量转换为低容量时,用强制类型转换,可能存在内存溢出或者精度问题
    15 低容量转成高时,会自动转换。
    16 除了基本类型,其余类型的默认值都是null
    17 整型默认值是0,浮点型双精度浮点型默认值是0.0,boolean默认值是false
    18 常量定义用final,一般用大写字符
    19 修饰符不存在先后顺序,比如static,final,哪个在前都可以
    20 instanceof属于关系运算符
    21 IDEA快捷键:command+d复制当前行到下一行
    22 对多个类型的数执行算术运算符时,结果跟随容量最长的那个类型,也叫自动转型。
    23 很多运算用工具类运算,比如Math
    24 短路运算:
    如果&&逻辑运算符与的第一个运算数是假,则不会执行后面的那个运算数。
    如果||逻辑运算符或的第一个运算数是真,则不会执行后面的那个运算数
    25 位移:左移1位相当于乘以2,右移1位相当于除以2,而且运算效率极高。因为是直接进行最底层的高电平低电平位运算
    26 +号进行了重载,只要+操作符的两个操作数里面有一个是字符串类型,则会自动把每个运算数转换成字符串类型,再进行字符串的拼接操作。但是如果字符串出现在多个+号最后面,前面是数字类型的+运算,仍旧会先进行数字类型的+运算,直到遇到字符串类型,才会转换成字符串类型拼接。
    int a = 3;
    int b = 4;
    System.out.println(""+a+b);
    System.out.println(a+b+"");
    27 包的本质就是文件夹
    28 scanner的hasNext和next哪个阻塞等待输入?
    29 case穿透,如果case后面没有break,则匹配case及其后的case都会被执行,假设后面的case也没有break
    30 switch适合匹配一系列具体的值,if适合比较范围区间,一个连续区间的范围
    31 把字节码文件.class文件,直接丢到IDEA里面,就会自动反编译显示出来
    32 java5引入了用于数组的增强型for循环
    33 for循环的本质
    先看个while循环
    int i = 0 ;//初始化条件
    int sum = 0 ;//初始化条件
    while (i<=100){//条件判断
    sum+=i;//循环体
    i++;//迭代
    }
    System.out.println(sum);

    34 IDEA写for循环的快捷键,数字.for,比如100.for+enter键会生成如下代码
    for (int i = 0; i < 100; i++) {

    }

    35 死循环
    while(true){}
    for(;;){}
    36 增强型for循环用于遍历数组或者集合,有个冒号在for里
    37 设计方法的原则: 方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,也就是一个方法只完成一个功能,一个方法只做一件事,利于后面的扩展
    38 方法里的return会返回值并终止方法
    39 定义可变参数的方法
    在类型后面有3个点的省略号然后跟形参名
    可变参数必须是参数列表的最后一个方法
    40 代码混淆:
    使用代码混淆技术,编译时通过给内部方法和变量混淆成随机字符串,在不影响正常使用的情况下,防止反编译之后看到业务逻辑。增加了对敏感信息和业务逻辑的保护,提高了破解的门槛
    41 递归结构包含两个部分:
    递归头:什么时候不调用自身方法,没有递归头,将陷入死循环。也就是退出递归的条件
    递归体:什么时候需要调用递归自身的方法
    42 引用传递就是传递对象,本质还是值传递。
    43 一个java文件里面,只能有一个public类,并且这个类名要和文件名完全一致。java文件里面的非public类可以有多个,这些就是内部类。
    44 一个项目只应该存在一个main方法
    45 面向对象编程的本质是以类的形式组织代码,以对象来封装数据
    46 一个类即便什么也没有,也会有个构造器
    47 构造器名字和类必须相同,必须没有返回值即使是void也不行。
    48 使用new关键字的时候,必须要有构造器。构造器就是用来初始化数据的。new的本质是调用构造器
    49 如果定义了有参数构造器,必须显式地定义无参构造器
    50 高内聚,低耦合。高内聚就是类的内部数据操作细节细节完成,不允许外部干涉。低耦合是指仅暴露少量的方法供外部使用。
    51 封装在属性层面:属性私有,通过get /set来存取
    52 通过get/set方法操作数据,更安全,也更灵活。比如get数据其实就是调用了方法,哪天get到的数据要经过处理,只需要改get方法的内部逻辑就行了。外部调用处不用改。这就是解耦,封装的灵活性
    53 封装:
    提高程序安全性,保护了数据
    隐藏代码实现细节
    统一接口
    系统可维护性增加
    54 IDEA的快捷键ctr+h可以查看继承树
    55 super关键字可以访问父类的方法和属性
    56 构造器的调用顺序,首先会调用父类的构造器,然后才调用子类的构造器。
    57 子类构造器调用父类构造器的代码必须在第一行
    58 一个对象的实际类型是确定的。但是指向这个对象的引用类型就不确定了。可以是接口类型,可以是实际类型的父类,或者实际类型的抽象类
    59 代码执行顺序:静态代码块,匿名代码块,构造器
    60 静态代码块只会执行一次,类加载的时候执行。匿名代码每次生成新对象的时候都会执行,可以放对象初始化代码
    61 静态导入包,import static java.lang.math.random;
    62 接口的本质是契约
    63 类只能有具体的方法
    抽象类可以有具体的方法,还有抽象的方法。抽象类可以没有抽象方法,只包含具体方法。语法可行,但是失去抽象类的意义了。
    接口只有抽象的方法,完全没实现的方法
    64 OO的精髓就是对对象的抽象,最能体现这一点的就是接口。设计模式所研究的实际上是如何去抽象。所以讨论设计模式的时候只能针对具备抽象能力的语言
    65 实现接口的类一定要去重写接口里面的所有方法
    66 匿名内部类,不用将实例保存到变量中。new Apple().eat();
    67 IDEA选中代码块后,快捷键comman+alt+T,会弹出try-catch-finally智能补全选项
    68 端口号代表计算机的一个应用或者程序的进程
    69 端口号规定范围是0-65535,单个协议下端口号不能相同,不同协议下端口号可以相同。udp:0-65535 tcp:0-65535
    公有端口:0-1023
    http:80
    https:443
    ftp:21

    程序注册端口:
    tomcat:8080
    MySQL:3306
    70 netstat -an 查看所有端口
    71 在IDEA里面直接new的File,路径是从工程根目录开始的。也就是在项目里面用的路径,默认是从工程的根目录开始的
    72 65535=2的16次方-1也等于16的4次方减一
    73 .bat文件是dos下的批处理文件,内容是一系列dos命令的集合。类似于linus下的.sh文件
    74 网络上一切传输都是流
    75 udp聊天的套路:
    发送:
    建立Socket:DatagramSocket
    创建数据包:DatagramPacket(需要有目标地址,目标端口,数据)
    发送包socket.send(packet);
    关闭流 socket.close();

      接收
     建立Socket:DatagramSocet
     创建数据包:DatagramPacket(需要有字节数组buff,offset,length)
     接收包 socket.receive(packet)
     关闭流 socket.close();
    

    76 tcp聊天的套路:
    发送:
    建立Socket:Socket(有目标地址和端口号)
    获取输出流OutPutStream
    发送数据:OutPutStream.write(byte[])
    关闭资源:关闭输出流,关闭Socket

    接收:
    建立ServerSocket:需要有端口号,IP即为本程序被部署的服务器的IP
    接受数据:死循环接收 serverSocket.accept()
    获取输入流对象,serverSocket.getInputStream()
    新建字节数组buffer作为临时存数据的地方。byte[] buffer = new byte[1024];
    新建接受buffer所有数据的对象 ByteArrayOutputStream()
    循环从输入流读取数据
    关闭资源
    

    77 udp互聊demo,多线程互聊demo。加入jar包使用实操
    78 用java命令执行java类时,如果报”找不到或者无法加载主类”。可能是因为类没有用完整包名,回到包名根目录,java com.xxx.xxx
    79 下载网络资源套路
    创建url
    url.openConnection
    获取inputStream
    创建FileOutPutStream来接收输出流到文件
    通过byte[]数组缓存,循环把数据读写完成
    清理资源

    try {
    URL url = new URL("http://localhost:8080/URLDemo/test.txt");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    InputStream is = connection.getInputStream();

    FileOutputStream os = new FileOutputStream(new File("te.txt"));
    
    byte[] buff = new byte[1024];
    
    int len;
    while ((len = is.read(buff))!=-1){
        os.write(buff,0,len);
    }
    
    os.close();
    is.close();
    connection.disconnect();
    

    } catch (Exception e) {
    e.printStackTrace();
    }

    80

    相关文章

      网友评论

          本文标题:java后端学习笔记-狂神学徒

          本文链接:https://www.haomeiwen.com/subject/gocqrktx.html