Loading

笔记-Java基础(2)-<重载/重写><Java创建对象的四种方式><反射>

1、重载(编译时多态)和重写(运行时多态)

  • 重载:同一个类中,同名方法具有不同的参数列表。(返回值也不同)
  • 重写:即覆盖。子类重新定义了父类的方法,方法体内功能有所不同,但参数列表和返回值类型都相同。

因为重载在编译时就可以通过方法实参列表来确定方法实现的状态,所以重载是编译时多态。
运行时多态性主要运用到动态绑定,只有在运行时才能动态地确定调用的是哪个函数,所以重写是运行时多态。

不能重写static和private方法

方法重写是基于运行时动态绑定的,而static方法是编译时静态绑定的,且static方法跟类的任何实例都不相关,所以不能重写static方法。

因为private修饰的变量和方法只能在当前类中使用,其他类继承当前类也是不能访问private变量或方法,所以不能重写private方法。

2、构造方法的特性

  1. 名字与类名相同
  2. 没有返回值(但不能用void申明构造函数)
  3. 生成类的对象时自动执行无须调用

定义一个不做事且没有参数的构造方法的意义:避免编译时出错

前提知识: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包。
  • 在运行时判断任意一个对象所属的类。
  • 在运行时构造任意一个类的对象。
  • 在运行时判断任意一个类所具有的成员变量和方法。
  • 在运行时调用任意一个对象的方法。
  • 生成动态代理。
posted @ 2022-03-10 17:19  George-Hu99  阅读(206)  评论(0)    收藏  举报