1. 匿名类对象:创建的类的对象是匿名的
1). 当我们只需要一次调用类的对象时,我们就可以考虑使用匿名的方式创建类的对象:new Test().show(),不赋值给一个变量,Java自动回收这个类的对象
2). 特点:创建的匿名类的对象只能够调用一次
2.可变个数的形参的方法:
1). 格式,对于方法的形参:数据类型 ... 形参名(public void getSum(String ... arg){ })
2). 可变个数的形参的方法与同名的方法之间构成重载
3). 可变个数的形参在调用时,个数从0开始到无穷多个都可以
4). 使用可变多个形参的方法与方法的形参使用数组是一致的
5). 若方法中存在可变个数的形参,那么一定要声明在方法形参的最后
3. 子类对象的多态性,父类的引用指向子类对象:Person p=new Man(); 向上转型
1). 虚拟方法调用:通过父类的引用指向子类的对象实体,当调用方法时,实际执行的是子类重写父类的方法
2). 程序运行分为编译状态和运行状态。对于多态性来说,编译时,"看左边",将此引用变量理解为父类的类型。运行时,"看右边",关注与真正对象的实体:子类的对象。那么执行的方法就是子类重写的。
3). 若想调用子类的方法,使用强转符:Man m=(Man)P;上下转型
4. instanceof:对象a instanceof 类A。判断对象a是否是类A的一个实例,返回值为boolean类型
5. 属性不存在多态性
6. static 修饰方法,内部可以调用静态的属性或者静态的方法,而不能调用非静态的属性和方法,反之非静态可以调用静态的属性和方法,原因是静态的生命周期比非静态的要早
7.代码块,如果有修饰符,只能使用static
1). 非静态代码块:
①. 可以对类的属性(静态或非静态,方法也是)进行初始化操作
{
ID="1001";
name="zhangsan";
}
②. 里面可以有输出语句
{
ID="1001";
name="zhangsan";
System.out.println("显示的内容");
}
③. 一个类中可以有多个非静态的代码块,多个代码块之间按照顺序结构执行
④. 每创建一个类的对象,非静态代码就加载一次
⑤. 非静态代码块的执行要早于构造器
2). 静态代码块:
①. 里面可以有输出语句
②. 随着类的加载而加载,而且只被加载一次
③. 多个静态代码块之间按照顺序结构执行
④. 静态代码块的执行要早于非静态代码块的执行
⑤. 静态的代码块中只能执行静态的结构(类属性,类方法)
8.final 关键字 可以用来修饰类、属性、方法
1). final 修饰类:这个类不能被继承。如:String 类、StringBuffer 类、System 类
2). final 修饰方法:不能被重写
3). final 修饰属性:此属性就是一个常量,一旦初始化之后,不可再被复制。
4). 变量用 static final 修饰:全局常量
9.抽象 abstract
1).abstract 修饰类:抽象类
①. 不可被实例化
②. 抽象类有构造器(凡是类都有构造器)
③. 抽象方法所在的类,一定是抽象类
④. 抽象类中可以没有抽象方法
2). abstract 修饰方法:抽象方法
①. 格式:没有方法体,包括{},如 public abstract void eat();
②. 抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写抽象方法
③. 若子类继承抽象类,并且重写了所有的抽象方法,则此类事一个"实体类",即可实例化
④. 若子类继承抽象类,并没有重写所有的抽象方法,意味着此类中仍有抽象方法,则此类必须声明为抽象的
3). abstract 不能用来修饰属性、构造器、private、final、static
①. abstract int name 属性不能覆盖
②. public abstract A1(){} 构造器不能被重写
③. public abstract final void A1(); 使用抽象就是用来重写的,而final是不允许重写的
④. public abstract static void A1(); static 可以直接通过类来调用,而声明为抽象,没有方法体
4). 抽象类的定义:是用来模型化那些父类无法确定全部实现,而是由其子类提供 具体实现的对象的类
10. 接口
1). 有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果
2). 从本质上讲,接口是一种特殊的抽象类,这种只包含常量和方法的定义,而没有变量和方法的实现
3). 是与类并行的一个概念
①. 接口可以看做是一个特殊的抽象类。是常量于抽象方法的一个集合。不能包含常量、一般的方法。
②. 接口没有构造器
③. 接口定义的就是一种功能,此功能可以被类所实现(implements)
④. 实现接口的类,必须要重写其中的所有抽象方法,方可实例化。若没有,则此类扔为一个抽象类
⑤. 类可以实现多个接口。Java 中类的继承是单继承
⑥. 接口与接口之间也是继承关系,而且可以实现多继承
⑦. 接口也有多态性
4). 通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系
5). 通过接口可以指明多个类需要实现的方法,一般用于定义对象的扩张功能。
6). 接口主要用来定义规范。接触耦合关系
11. 内部类
1). 创建内部类
//创建静态内部类的对象,可以直接通过外部类调用静态内部类的构造器
Person.Dog d = new Person.Dog();
//创建非静态内部类的对象。必须先创建外部类的对象,通过外部类的对象调用内部类的构造器
Person p = new Person();
Person.Bird b = p.new Bird();
2). 调用内外部类的属性(重名时)
//Person 中 有一个内部类 Bird
//在Bird中添加 setName 方法,并且调用
public void setName(String name){
System.out.printIn(name)// 形参的 name
System.out.printIn(this.name)// Bird 的 name
System.out.printIn(Person.this.name)// Person 的 name
}
12. 异常
1). 异常事件分为两类:Error 和 Exception
Error:Java 虚拟机无法解决的验证问题。如:JVM 系统内部错误、资源耗尽等严重情况。一般不编写针对性的代码进行处理
Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使针对性的代码进行处理。例如:空指针访问,试图读取不存在的文件,网络连接中断
2). 第二种可以用try catch finally 处理