笔记-Java基础(2)-<重载/重写><Java创建对象的四种方式><反射>
1、重载(编译时多态)和重写(运行时多态)
- 重载:同一个类中,同名方法具有不同的参数列表。(返回值也不同)
- 重写:即覆盖。子类重新定义了父类的方法,方法体内功能有所不同,但参数列表和返回值类型都相同。
因为重载在编译时就可以通过方法实参列表来确定方法实现的状态,所以重载是编译时多态。
运行时多态性主要运用到动态绑定,只有在运行时才能动态地确定调用的是哪个函数,所以重写是运行时多态。
不能重写static和private方法
方法重写是基于运行时动态绑定的,而static方法是编译时静态绑定的,且static方法跟类的任何实例都不相关,所以不能重写static方法。
因为private修饰的变量和方法只能在当前类中使用,其他类继承当前类也是不能访问private变量或方法,所以不能重写private方法。
2、构造方法的特性
- 名字与类名相同
- 没有返回值(但不能用void申明构造函数)
- 生成类的对象时自动执行无须调用
定义一个不做事且没有参数的构造方法的意义:避免编译时出错
前提知识:Java在执行子类的构造方法前,如果没用super()方法来调用父类特定的构造方法,则会默认调用父类中“没带参数的构造方法”
可能出错的原因:在①父类只定义了带参数的构造方法且②子类没有用super()调用父类带参构造方法的情况下可能会出现编译时错误。
所以定义一个不做事且没有参数的构造方法可以避免编译时出错
3、Java创建对象的几种方式
1. 使用new关键字;
补充:(new的本意是分配内存)---程序执行至new操作符时,先根据new操作符后面的类型来确定分配空间的大小。分配完内存后,调用构造函数,填充对象的各个域(对象的初始化)
2. 使用Class类的newInstance()方法,调用无参构造器创建对象(通过反射创建新的类);
补充:通过反射创建新的类有两种方式:-->Class.newInstance() 只能够调用无参的构造函数,即默认的构造函数;Constructor.newInstance() 可以根据传入的参数,调用任意构造函数
3. 使用clone()方法
创建一个对象的新副本
4. 反序列化,如调用readObject()方法
readObject()方法从ObjectInputStream中读取对象
本节补充:Java反射
认识Java反射机制,先要明白编译器和运行期
-
编译期:编译期是指把源码交给编译器编译成计算机可以执行的文件的过程。在 Java 中也就是把 Java 代码编成 class 文件的过程。编译期只是做了一些翻译功能,并没有把代码放在内存中运行起来,而只是把代码当成文本进行操作,比如检查错误。
-
运行期:运行期是把编译后的文件交给计算机执行,直到程序运行结束。所谓运行期就把在磁盘中的代码放到内存中执行起来。
Java 反射机制是在运行状态中:
对于任意一个类,都能够知道这个类的所有属性和方法;都能构造任意类的对象;
对于任意一个对象,都能够调用它的任意方法和属性(成员变量);
简单来说,反射机制指的是程序在运行时能够获取自身的信息。在 Java 中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。
Java 反射机制主要提供了以下功能,这些功能都位于java.lang.reflect包。
- 在运行时判断任意一个对象所属的类。
- 在运行时构造任意一个类的对象。
- 在运行时判断任意一个类所具有的成员变量和方法。
- 在运行时调用任意一个对象的方法。
- 生成动态代理。

浙公网安备 33010602011771号