整数
二进制整数的类型,0b开头即可;
例如:int a = 0b0101:
长数字可用下划线分隔符进行分割;
例如:int b = 1_2312_3131;
变量命名规则(规范)
1. 所有变量、方法、类名:见名知意
2. 类成员变量:首字母小写和驼峰原则 : monthSalary
3. 局部变量:首字母小写和驼峰原则
4. 常量:大写字母和下划线:MAX_VALUE
5. 类名:首字母大写和驼峰原则: Man, GoodMan
6. 方法名:首字母小写和驼峰原则: run(), runRun()
运算
java中的乘幂处理:double b = Math.pow(3, 2);
Math类提供了很多科学和工程计算需要的方法和常数。
内存分析
内存分析:
栈:
1. 每个线程私有,不能实现线程间的共享!
2. 局部变量放置于栈中。
3. 栈是由系统自动分配,速度快!栈是一个连续的内存空间!
堆:
1. 放置new出来的对象!
2. 堆是一个不连续的内存空间,分配灵活,速度慢!
方法区(也是堆):
1. 被所有线程共享!
2. 用来存放程序中永远是不变或唯一的内容。(类代码信息、静态变量、字符串常量)
封装
封装的使用细节:
1.属性一般使用private.(除非本属性确定会让子类继承并且使用),提供相应的get/set方法来访问相关属性.
2.这些方法通常是public,从而提供对属性的读取操作。 (注意:boolean变量的get方法是用:is开头!)
3.一些只用于本类的辅助性方法可以用private,希望其他类调用的方法用public。
多态
多态的使用要点:
参考链接:https://www.runoob.com/java/java-polymorphism.html
1. 多态是方法的多态,属性没有多态性。
2. 编写程序时,如果想调用运行时类型的方法,只能进行类型转换。不然通不过编译器的检查。
3. 但是如果两个没有关联的类进行强制转换,会报:ClassCastException。 比如:本来是狗,我把它转成猫。就会报这个异常。
4. 多态的存在要有3个必要条件:要有继承,要有方法重写,父类引用指向子类对象
对象的转型(casting)
为什么需要强制转换类型?
1.引用变量只能调用它编译类型的方法,不能调用它运行类型的方法。这时,我们就需要进行类型的强制转换!
2.一个父类的引用类型变量可以“指向”其子类的对象。
3.一个父类的引用不可以访问其子类对象新增加的成员(属性和方法)。
4.可以使用 引用 变量 instanceof 类名 来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。
5.子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)
抽象类的应用场景
参考链接:https://www.runoob.com/java/java-abstraction.html
a. 在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。
b. 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。
抽象类的使用要点
1. 通过抽象类,可以避免子类设计的随意性。
2. 有抽象方法的类只能定义能抽象类
3. 抽象类不能实例化,及不能用new来实例化抽象类。
4. 抽象类可以包含属性、方法、构造方法。但是构造方法不能用来new实例,只能用来被子类调用。
5. 抽象类只能用来继承。
6. 抽象方法必须被子类实现
接口的应用场景
参考链接:https://www.runoob.com/java/java-interfaces.html
a. 一般情况下,实现类和它的抽象类之前具有 "is-a" 的关系,但是如果我们想达到同样的目的,但是又不存在这种关系时,使用接口。
b. 由于 java 中单继承的特性,导致一个类只能继承一个类,但是可以实现一个或多个接口,此时可以使用接口。
c. 接口有以下特性:
1.接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
2.接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
2.接口中的方法都是公有的。
d. 接口的实现
1.当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
2.类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面
在使用中抽象类和接口我们该如何选择?
* 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
* 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可实现多个接口。因此可以使用接口来解决。
* 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类
增强 for 循环语法
增强 for 循环语法:
链接:https://www.runoob.com/java/java-loop.html
for(声明语句 : 表达式)
{
//代码句子
}
声明语句:
声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:
表达式是要访问的数组名,或者是返回值为数组的方法。
ArrayList 排序
链接:https://www.runoob.com/java/java-arraylist.html
Collections 类也是一个非常有用的类,位于 java.util 包中,提供的 sort() 方法可以对字符或数字列表进行排序。
泛型(重难点)
泛型类、泛型接口、泛型方法
泛型可以对很多不同数据类型进行统一处理,但需要明确使用状态 另外需要注意通配符上下限问题
链接:
通配符上下限问题:https://blog.csdn.net/weixin_43194854/article/details/122617585
Java 泛型:https://www.runoob.com/java/java-generics.html
泛型详解:https://www.cnblogs.com/coprince/p/8603492.html
序列化
1.序列化:将对象写入到IO流中
2.反序列化:从IO流中恢复对象
意义:
1.序列化机制允许将实现序列化的Java对象转换位字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以达到以后恢复成原来的对象。
2.序列化机制使得对象可以脱离程序的运行而独立存在。
使用场景:
1.所有可在网络上传输的对象都必须是可序列化的,比如RMI(remote method invoke,即远程方法调用),传入的参数或返回的对象都是可序列化的,否则会出错;
2.所有需要保存到磁盘的java对象都必须是可序列化的。通常建议:程序创建的每个JavaBean类都实现Serializeable接口。
疑问点:
序列化版本号serialVersionUID
链接:https://www.cnblogs.com/9dragon/p/10901448.html
问题点
Thread
反射
回调
匿名类