Java基础(易错)知识

调整格式快捷键: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、冒泡排序:外层循环作计数器,内层循环一次,最大的一个数被交换到末尾,下一轮循环就可以“刨除”最后的数,每一轮循环都比上一轮循环的结束位置靠前一位。

 25、一个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、构造器:

  1. 和类名相同
  2. 没有返回值

作用:

  1. 使用new关键字,本质是在调用构造器
  2. 用来初始化值

注意点:如果在类中没有显式地构造构造器的话,系统会默认提供一个无参的构造器:Person(),一旦定义了有参构造,无参就必须显示定义。

48、内存图解

49、封装:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏的信息进行操作和访问。

高内聚,低耦合

该露的露,该藏的藏

属性私有,get/set

50、封装的作用

  1. 提高程序的安全性,保护数据
  2. 隐藏代码的实现细节
  3. 统一接口
  4. 系统可维护性增加了

51、封装的实现步骤

(1)修改属性的可见性为private

(2)创建get/set方法(用于属性的读写)(通过这两种方法对数据进行获取和设定,对象通过调用这两种方法实现对数据的读写)

(3)在get/set方法中加入属性控制语句(对属性值的合法性进行判断)

52继承:本质是对某一批类的抽象,从而实现对现实世界更好的建模。(继承是类和类之间的一种关系)

53、Java类中只有单继承,没有多继承。

54、super的注意点

  1. super调用父类的构造方法,必须在构造方法的第一个
  2. super必须只能出现在子类的方法或者构造方法中!
  3. 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、多态注意事项

  1. 多态是方法的多态,属性没有多态性
  2. 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类)
  3. 父类和子类有联系,小心类型转换异常(ClassCastException)
  4. 存在条件:有继承关系,子类重写父类的方法,父类引用指向子类对象  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;

 

 

    

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值