Java SE 基础知识(二)
1. 类由两大部分构成:属性和方法。属性一般用名词来表示,方法一般用动词来表示。
2. 如果一个java源文件中定义了多个类,那么这些类中最多只能有一个类是public的,可以都不是public的。
3. 在Java中进行方法参数传递时,无论传递的是原生数据类型还是引用数据类型,参数传递方式统一是传值(pass by value),Java中没有
传递引用(pass by reference)的概念。
4. 方法重载(Overload):表示两个或多个方法名字相同,但方法参数不同。方法参数不同有两层含义:
1). 参数个数不同
2). 参数返回值不同
5. 如果想在一个构造方法中调用另外一个构造方法,那么可以使用this()的方式调用,this()括号中的参数表示目标构造方法中的参数。this()必须作为
构造方法的第一条语句。
6. Java是单继承的
7. super关键字:super表示对父类对象的引用。
8. 如果子类使用super()显示调用父类的某个构造方法,那么在执行的时候就会寻找与super()所对应的构造方法而不会再去寻找父类的不带参数的构造方法。
与this一样,super()也必须要作为构造方法的第一条语句执行。
9. 当父类没有不带参数的构造方法时,子类需要使用super来显示地调用父类的构造方法,super指的是对父类的引用。
10. 方法重写(Override) :又叫做覆写,子类与父类的方法返回类型一样、方法名称一样,参数一样,这样我们说子类与父类的方法构成了重写关系。
11. 当两个方法形成重写关系时,可以在子类方法中通过super.run()形式调用父类的run()方法,其中super.run()不必放在第一行语句,因为此时父类对象已构造完毕,
先调用父类的run方法还是先调用子类的run方法时根据程序逻辑决定的。
12. 在定义一个类的时候,如果没有显式指定该类的父类,那么该类就会继承于 java.lang.Object 类(JDK 提供的一个类, Object类是 Java 中所有类的直接或间接父类)。
13. 多态(Polymorphism):所谓多态,就是父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向实现该接口的类的实例。
14. 强制类型转换:
1). 向上类型转换(upcast) :比如说将 Cat 类型转换为 Animal 类型,即将子类型转换为父类型。对于向上类型转换,不需要显式指定。
2). 向下类型转换(downcast) :比如将 Animal 类型转换为 Cat 类型。即将父类型转换为子类型。对于向下类型转换,必须要显式指定(必须要使用强制类型转换) 。
15. 抽象类(abstract class):使用abstract修饰的类叫做抽象类,抽象类无法实例化。
16. 如果某个类包含了抽象方法,那么该类一定是抽象类。但抽象类中也可以包含具体的方法(有声明,有实现)。
17. 在子类继承父类(父类是一个抽象类)的情况下,那么该子类必须要实现父类中定义的所有抽象方法;否则,该子类需要声明为一个abstract class。
18. 接口介绍:
1). 接口中的所有方法都是抽象方法。在声明接口中的方法时,可以使用abstract关键字,也可以不使用。通常情况下省略。
2). 一个类实现了某个接口,那么该类必须要实现接口中声明的所有方法。如果该类是一个抽象类,可以不实现接口中的方法。
3). 接口中也可以定义成员变量。 接口中的成员变量都是 public 、final 、static 的。
20. static 关键字:
1). static 修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量;一个对象对该静态成员变量进行了修改,其他对象的该
静态成员变量的值也会随之发生变化。如果一个成员变量是 static 的,那么我们可以通过 类名. 成员变量名的方式来使用它(推荐使用这种方式) 。
2). static 修饰方法:static 修饰的方法叫做静态方法。对于静态方法来说,可以使用 类名. 方法名的方式来访问。
3). 静态方法只能继承,不能重写。
21. static 代码块:
1). 静态代码块。静态代码块的作用也是完成一些初始化工作。首先执行静态代码块, 然后执行构造方法。 静态代码块在类被加载的时候执行,而构造方法
是在生成对象的时候执行;要想调用某个类来生成对象,首先需要将类加载到 Java 虚拟机上(JVM) ,然后由 JVM 加载这个类来生成对象。
2). 类的静态代码块只会执行一次,是在类被加载的时候执行的,因为每个类只会被加载一次,所以静态代码块也只会被执行一次;而构造方法则不然,每次
生成一个对象的时候都会调用类的构造方法,所以 new 一次就会调用构造方法一次。
3). 如果继承体系中既有构造方法,又有静态代码块,那么首先执行最顶层的类的静态代码块,一直执行到最底层类的静态代码块,然后再去执行最顶层类的
构造方法,一直执行到最底层类的构造方法。 注意:静态代码块只会执行一次。
22. final 关键字:
1).final 修饰类:当一个类被 final 所修饰时,表示该类是一个终态类,即不能被继承。
2).final 修饰方法:当一个方法被 final 所修饰时,表示该方法是一个终态方法,即不能被重写(Override)。
3).final 修饰属性:当一个属性被 final 所修饰时,表示该属性不能被改写。当final修饰一个原生数据类型时,表示该原生数据类型的值不能发生变化从 (比如说
不能从10变为20);如果 final修饰一个引用类型时,表示该引用类型不能再指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。
23. final 类型成员变量赋值方式 :
1). 在声明 final 类型的成员变量时就赋上初值
2). 在声明 final 类型的成员变量时不赋初值,但在类的所有构造方法中都为其赋上初值。
24. 静态的只能访问静态的;非静态的可以访问一切。不能在静态方法中使用this关键字。
25. 包:用于将完成不同功能的类分门别类,放在不同的目录(包)下。包的命名规则: 将公司域名反转作为包名。对于包名:每个字母都需要小写。如果定义类的时候
没有使用 package,那么Java 就认为我们所定义的类位于默认包里面(default package)。
26. 编译带有 package 声明的 Java 源文件有两种方式:
1). 直接编译, 然后根据类中所定义的包名,逐一手工建立目录结构,最后将生成的 class文件放到该目录结构中(很少使用,比较麻烦) 。
2). 使用编译参数 –d,方式为 javac –d . 源文件.java,这样在编译后,编译器会自动帮助我们建立好包所对应的目录结构。
27. import a.bb.*,表示导入 a.bb 包下面的所有类。import aa.bb.*并不会导入 aa.bb.cc 包下面的类。
28. 如果两个类在同一个包下面,不需要导入,可以直接使用。
29. 访问修饰符(access modifier):
1). public(公共的):被 public 所修饰的属性和方法可以被所有类访问。
2). protected(受保护的):被 protected 所修饰的属性和方法可以在类内部、相同包以及该类的子类所访问。
3). private(私有的):被 private 所修饰的属性和方法只能在该类内部使用
4). 默认的(不加任何访问修饰符):在类内部以及相同包下面的类所使用。
30. instanceof: 判断某个对象是否是某个类的实例。语法形式:引用名 instanceof 类名(接口名) ,返回一个 boolean 值。当类名为父类名时,返回值也是true。
31. 相等性的比较(==)
1). 对于原生数据类型来说,比较的是左右两边的值是否相等。
2). 对于引用类型来说,比较左右两边的引用是否指向同一个对象,或者说左右两边的引用地址是否相同。
32. java.lang 包下的类无需显示导入,编译时编译器会自动帮我们导入。
33. 16 进制,逢 16 进一,16 进制的数字包括:0~9,A,B,C,D,E,F,字母不区分大小写。
34. equals() 方法,该方法定义在 Object 类当中,因此 Java 中的每个类都具有该方法,对于Object类的equals() 方法来说,它是判断调用 equals() 方法的引用与
传进来的引用是否一致,即这两个引用是否指向的是同一个对象。于 对于 Object 类的 equals() 方法来说,它等价于==
35. 当打印引用时,实际上会打印出引用所指对象的 toString()方法的返回值,因为每个类都直接或间接地继承自 Object,而 Object 类中定义了toString(),
因此每个类都有toString()这个方法。
36. 包装类(Wrapper Class) : 针对于原生数据类型的包装。所有的包装类(8 个)都位于java.lang 包下。Java 中的 8 个包装类分别是:
Byte, Short, Integer, Long, Float, Double,Character, Boolean
他们的使用方式都是一样的,可以实现原生数据类型与包装类型的双向转换。
37. 对于 Java 中的常量的命名规则: 所有单词的字母都是大写, 如果有多个单词,那么使用下划线连接即可。比如说:
public static final int AGE_OF_PERSON = 20;