调整格式快捷键:Ctrl+Alt+L
get/set快捷键:Alt+Insert(笔记本电脑:Fn+Alt+Insert)
环绕方式:Ctrl+Alt+T
方法重写:Ctrl+O
运行:Ctrl+Shift+F10
1、浮点数在计算机中常常无法精确表示,并且计算可能出现误差,因此,判断浮点数相等用==判断不靠谱。
2、判断引用类型的变量是否相等,==表示“引用是否相等”,或者说,是否指向同一个对象。
3、引用类型判断内容相等要使用equals( ),注意避免NullPointerException。
4、for each循环的变量n不再是计数器,而是直接对应到数组的每个元素。
for (int n : a) {
System.out.println(n);
} //a是数组名
5、Java提供Scanner对象来方便输入,读取对应的类型可以使用:
scanner.nextLine() / nextInt() / nextDouble() / ...
(输入字符)
6、类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物。
7、对象是对抽象概念的具体实例。
8、面向对象编程的本质就是:以类的方式组织代码,以对象的形式组织(封装)数据。
9、布尔运算的一个重要特点是短路运算。如果一个布尔运算的表达式能提前确定结果,则后续的计算不再执行,直接返回结果。
10、与运算(前一个是false就停止)和或运算(前一个是true就停止)是短路运算。
11、三元运算b ? x : y后面的x,y类型必须相同,三元运算也是“短路运算”,只计算x或y。
12、String s = “abc\”xyz”;//包含7个字符:a,b,c,”,x,y,z
String s = “abc\\xyz”;//包含7个字符:a,b,c,\,x,y,z (因为\是转义字符,所以,两个\\表示一个\字符)
13、Java的编译器对字符串做了特殊照顾,可以使用+连接任意字符串和其他数据类型,这样极大地方便了字符串的处理。
输出:Hello World!
14、如果用+连接字符串和其他数据类型,会将其他数据类型先自动转型为字符串,再连接:
输出:age is 25
15、从Java 13开始,字符串可以用"""..."""表示多行字符串(Text Blocks)了。
输出:
SELECT * FROM
users
WHERE id > 100
ORDER BY name DESC
16、字符串的不可变是指字符串内容不可变。变量s的作用类似于C语言的指针,可指向不同的字符串。
17、引用类型的变量可以指向一个空值null,它表示不存在,即该变量不指向任何对象。注意要区分空值null和空字符串"",空字符串是一个有效的字符串对象,它不等于null。
18、Java的字符类型char是基本类型,字符串类型String、数组是引用类型;基本类型的变量是“持有”某个数值,引用类型的变量是“指向”某个对象。
19、数组所有元素初始化为默认值,整型都是0,浮点型是0.0,布尔型是false。
20、数组元素可以是值类型(如int)或引用类型(如String),但数组本身是引用类型。
21、引用类型的变量类似于C语言的指针,它内部存储一个“地址”,指向某个对象在内存的位置。
22、布尔类型boolean只有true和false两个值,Java语言对布尔类型的存储并没有做规定,因为理论上存储布尔类型只需要1 bit,但是通常JVM内部会把boolean表示为4字节整数。
23、可以将浮点型强制转为整型,但超出范围后将始终返回整型的最大值。
24、冒泡排序:外层循环作计数器,内层循环一次,最大的一个数被交换到末尾,下一轮循环就可以“刨除”最后的数,每一轮循环都比上一轮循环的结束位置靠前一位。
一个Java源文件可以包含多个类的定义,但只能定义一个public类,且public类名必须与文件名一致。如果要定义多个public类,必须拆到多个Java源文件中。
26、类中定义字符串时要大写S,String!
class book
{
String name;
}
27、定义class就是定义了一种数据类型,对应的instance是这种数据类型的实例。
28、字符串的set和get
29、构造方法用于初始化实例,构造方法的名称就是类名。和普通方法相比,构造方法没有返回值(也没有void),调用构造方法,必须用new操作符。
定义:
调用:
30、没有在构造方法中初始化字段时,引用类型的字段默认是null,数值类型的字段用默认值,int类型默认值是0,布尔类型默认值是false。
31、方法重载是指多个方法的方法名相同,但各自的参数不同,重载方法应该完成类似的功能,重载方法返回值类型应该相同。
32、继承:子类自动获得了父类的所有字段,严禁定义与父类重名的字段。
33、Java只允许一个class继承自一个类,因此,一个类有且仅有一个父类。只有Object特殊,它没有父类。
34、protected关键字可以把字段和方法的访问权限控制在继承树内部,一个protected字段和方法可以被其子类,以及子类的子类所访问。
35、如果父类没有默认的构造方法,子类就必须显式调用super( )并给出参数以便让编译器定位到父类的一个合适的构造方法。即子类不会继承任何父类的构造方法。子类默认的构造方法是编译器自动生成的,不是继承的。
36、正常情况下,只要某个class没有final修饰符,那么任何类都可以从该class继承。
37、把一个子类类型安全地变为更为抽象的父类类型的赋值,被称为向上转型(upcasting),如果Student是从Person继承下来的,那么,一个引用类型为Person的变量,能指向Student类型的实例。
38、为了避免向下转型出错,Java提供了instanceof操作符,判断一个变量所指向的实例是否是指定类型,或者这个类型的子类。
(向下转型)
39、继承是is关系,组合是has关系。
40、在Java中,任何class的构造方法,第一行语句必须是调用父类的构造方法。如果没有明确地调用父类的构造方法,编译器会帮我们自动加一句super( )。
41、方法名相同,方法参数相同,但方法返回值不同,也是不同的方法。在Java程序中,出现这种情况,编译器会报错。
42、多态具有一个非常强大的功能,就是允许添加更多类型的子类实现功能扩展,却不需要修改基于父类的代码。
43、如果一个父类不允许子类对它的某个方法进行覆写,可以把该方法标记为final,用final修饰的类不能被继承。
44、因为抽象类本身被设计成只能用于被继承,因此,抽象类可以强迫子类实现其定义的抽象方法,否则编译会报错。因此,抽象方法实际上相当于定义了“规范”。
例如,Person类定义了抽象方法run( ),那么,在实现子类Student的时候,就必须覆写run( )方法。
45、
46、Java中只有值传递,没有引用传递,所谓的引用传递也就是传递了引用的拷贝,所以本质也是值传递。
47、构造器:
- 和类名相同
- 没有返回值
作用:
- 使用new关键字,本质是在调用构造器
- 用来初始化值
注意点:如果在类中没有显式地构造构造器的话,系统会默认提供一个无参的构造器:Person(),一旦定义了有参构造,无参就必须显示定义。
48、内存图解
49、封装:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏的信息进行操作和访问。
高内聚,低耦合
该露的露,该藏的藏
属性私有,get/set
50、封装的作用
- 提高程序的安全性,保护数据
- 隐藏代码的实现细节
- 统一接口
- 系统可维护性增加了
51、封装的实现步骤
(1)修改属性的可见性为private
(2)创建get/set方法(用于属性的读写)(通过这两种方法对数据进行获取和设定,对象通过调用这两种方法实现对数据的读写)
(3)在get/set方法中加入属性控制语句(对属性值的合法性进行判断)
52继承:本质是对某一批类的抽象,从而实现对现实世界更好的建模。(继承是类和类之间的一种关系)
53、Java类中只有单继承,没有多继承。
54、super的注意点
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中!
- super和this不能同时调用构造方法!
55、super和this的不同
(1)代表的对象不同
this:本身调用者这个对象
super:代表父类对象的应用
(2)前提
this:没有继承也可以使用
super:只能在继承条件下才可以使用
(3)构造方法
this();本类的构造
super();父类的构造
56、方法重写的现象
57、方法重写需满足(父类和子类)
(1)方法名必须一致
(2)方法参数必须一致
(3)子类的方法的访问修饰符不能缩小访问权限
(4)返回值类型要一致(子类的返回值类型 也可以是 父类的返回值类型的子类)
(5)抛出的异常:范围,可以被缩小,但不能被扩大。
58、对象能执行哪些方法,主要看左边的类型,与右边关系不大。
59、指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用这些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)。
60、一个对象的实例类型是确定的(new Student();),但是引用类型不是确定的,可以父类的引用指向子类。
61、多态注意事项
- 多态是方法的多态,属性没有多态性
- 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类)
- 父类和子类有联系,小心类型转换异常(ClassCastException)
- 存在条件:有继承关系,子类重写父类的方法,父类引用指向子类对象 Father f1 = new Son( );
62、多态:即同一方法可以根据发送对象的不同而采用多种不同的行为方式。
63、static只执行一次。
64、抽象方法只有方法名,没有方法的实现。不能new抽象类,只能靠子类(方法重写)去实现它(约束)。有抽象方法就必须是抽象类,但抽象类中可以写普通方法。
65、接口就是规范,定义的是一组规则,接口的本质是契约,类似我们的法律。
66、实现了接口的类,就需要重写接口中的方法。接口中的所有定义其实都是抽象的public abstract。接口中定义的属性都是常量public static final。接口不能被实例化,接口中没有构造方法。
67、内部类可以获得外部类的私有方法、私有属性。
68、一个java类中可以有多个class类,但是只能有一个public class类。
69、异常(Exception)指程序运行中出现的不期而遇的各种状况。错误(Error)不是异常,是由java虚拟机生成并抛出的,大多数错误与代码编写者所执行的操作无关。异常有检查性异常和运行时异常。
70、捕获异常:try监控区域,catch(想要捕获的异常),finally。
假设要捕获多个异常,应从小到大!如Exception到Throwable
71、异常经验总结
72、抽象类的使用
73、接口理解
74、字符串连接符:+号在前后的区别
a=10;
b=10;