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()所对应的构造方法而不会再去寻找父类的不带参数的构造方法。

()也必须要作为构造方法的第一条语句执行。

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;