1. final

final是java中的一个关键字,表示最终的,不可变的,final可以修饰变量方法还有类。

如果给类添加final关键字,则类无法继承。

final修饰的方法无法被重写和覆盖。

final修饰的局部变量,一旦赋值不能重新被赋值。只能赋一次值

final修饰的引用:

该引用只能指向1个对象,并且它只能永远指向该对象。无法指向其他对象,并且在该方法执行过程中,该引用指向对象之后,该对象不会被垃圾回收器回收。直到当前方法结束,才会释放空间。

final修饰的实例变量,系统不管赋默认值,要求程序员必须手动赋值。

final int age;//编译错误

final double height =1.8 //编译可以通过

final double height;
public user(){
    this height=80;
}
//编译可以通过

结论:final修饰的实例变量,系统不管赋默认值,要求程序员必须手动赋值。这个手动赋值,在变量后面赋值也行,在构造方法中赋值也行。

 

2.抽象类

Q:什么是抽象类?

A:类和类之间具有共同特征,将这些共同特征提取出来,形成的就是抽象类。类本身是不存在的,所以抽象类无法创建对象《无法实例化》

 

Q:抽象类属于什么类型?

抽象类也属于引用数据类型

 

Q:抽象类怎么定义?

语法:

  [修饰符列表] abstract class 类名{

  类体;

}

 

抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被子类继承的。

 

final和abstract不能联合使用,这两个关键字是对立的。

 

抽象类的子类可以是抽象类。抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。

 

抽象类关联到一个概念:抽象方法,什么是抽象方法?

抽象方法表示没有实现的方法,没有方法体的方法,例如:

     public abstract void dosome();

  抽象方法的特点是:

  特点1:没有方法体,以分号结尾。

  特点2:前面修饰符列表中有abstract关键字。

 

 抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中。

 

一个非抽象的类继承抽象类,必须将抽象类中的抽象方法实现了。这是java语法中强行规定的,必须的,不然编译器就会报错。

 

3.接口

接口也是一种引用数据类型。

接口是完全抽象的(抽象类是半抽象)或者也可以说接口是特殊的抽象类

接口怎么定义?语法是什么?

  [修饰符列表] interface 接口名{

接口只支持多继承,一个接口可以继承多个接口

接口只包含两部分内容:一部分是常量,一部分是抽象方法

接口中的所有内容都是由public修饰的(都是公开的)

接口中抽象方法定义时,public abstract修饰符可以省略

接口中的方法都是抽象方法,所以接口中不能有方法体。

接口中的常量的public static final可以省略

 

接口的基础语法:

类和类之间可以继承,类和接口之间叫做实现。

继承使用extends关键字实现。

实现使用implements关键字完成。

 

当一个非抽象的类实现接口的话,必须将接口中的所有抽象方法全部实现(覆盖/重写)。

接口和接口在没有继承关系的时候也可以强转,但是可能会出现ClassCastException。.

 

继承和实现都存在的话,代码应该怎么写?

extends 关键字在前

implements 关键字在后

 

接口在开发中的作用:类似于多态在开发中的作用

多态:面向抽象编程,不要面向具体编程,降低程序的耦合度,提高扩展力。

 

类型和类型之间的关系:

is a  has a  like a

is a

  Cat is a animal(猫是一个动物)

  凡是满足is a的都是继承关系

  

has a

  He has a pan(他有一支笔)

  凡是满足has a的都是关联关系

  关联关系通常以"属性“的形式存在

 

like a

  chef like a menu(厨师像菜单)

  凡是能满足like a的表示实现关系

  实现关系通常是:类实现接口

 

4.包

关于java中的package和import机制

Q:为什么要使用package?

A:package是java中包机制。包机制的作用是为了方便程序的管理。不同功能的类分别存放在不同的包下。

 

Q:package怎么用呢?

A:package是一个关键字,后面加包名。例如:

package com.xiaoxiongbingqilin.javase.06;

注意: package语句只允许出现在java源代码的第一行。

 

Q:包名有没有命名规范?

A:一般都采用公司名字倒叙的方式(因为公司域名具有全球唯一性)

 

Q:对于带有package的java程序怎么编译?怎么运行?

A:采用以前的编译形式不行了,类名不再是 HelloWorld了

类名是package com.xiaoxiongbingqilin.javase.06.HelloWorld;了

或者java -d . HelloWorld.java

  javac:负责编译的命令

  -d:带包编译

  . 代表编译之后生成的东西放到当前目录下(点代表当前目录)

  HelloWorld.java 被编译的java文件名

 

5. import

关于import的使用:

Q:import什么时候使用?

A:A类中使用B类

A和B类在同一个包下,不需要使用import

A和B类不在同一个包下,需要使用import

 

Q:import怎么用?

A:import语句只能出现在package语句下,class语句上

import还可以采用*号的方式