Java基础笔记总结(4)-面向对象编程(构造方法,继承,this和super,final,方法重写)

构造方法:给数据的对象进行初始化

注意:

1、方法名和类名相同

2、没有返回值类型,也不需要void

3、没有具体的返回值类型return(return;)

4、构造方法不能使用对象进行调用 P.Person()是错误,在创建对象的时候,系统帮我调用构造方法

构造方法的重载

“方法名相同,与返回值类型无关,至于参数类型有关”

  若没有给出构造方法,系统自动给提供一个无参构造方法,若给出了构造方法,系统不会自动给出,需要自己提供

==============================================================

创建对象的步骤,

1、将编译文件加载进入内存

2、声明类引用, 用压栈将Main压入栈 在栈中创建声明类

3、在堆内存中new 出一块空间,并把地址付给栈

4、将构造方法压入栈执行,并修改参数

==============================================================

static 关键字

方法区中的编译文件有两块区域:静态区域和非静态区域

1、随着类的加载而加载

2、优先于对象存在的

3、被所有的对象所共享

如果某个成员变量被所有对象共享,就可以定义为静态的

4、可以通过类名直接调用

注意事项:

1、静态方法中没有this关键字,因为静态随着类的加载而加载,this是随着对象的创建而存在。静态比对象先存在,因此不能使用this关键词

2、静态方法只能静态成员变量和静态成员方法

3、 非静态方法既可以访问静态成员变量,也可以访问非静态成员变量,既可以访问静态成员方法,也可以访问非静态成员方法

主方法的格式:

public  static void main(String[] args)

public:被jvm调用,权限足够大

static:被jvm调用,不需要创建对象,直接调用即可

void:被Jvm调用不需要任何返回值

main:只有这样写被能被jvm识别

String[] args 以前是用来接收键盘录入的(现在都是用Scanner)

-----------------------------------------------------------------------------------------------------------------

使用静态类做一个工具类 直接在方法上创建static ,省去创建对象的力气

如果一个类中所有方法都是静态的,需要多做一步,私有构造方法,防止私自创建对象

====================================================================

文档说明书

类名前要增加Public

/**

这是一个数组工具类,里面封装了查找数组最大值等方法

@author xxx

@version v1.0

*/

在每个方法上

/**

描述相关方法

@param 参数名 参数类型

@return 返回数组中的最大值

*/

  编译java说明书用javadoc -d api -version -author -类名

-------------------------------------------------------------------------------------------------------------------

随机数的使用 Math.random() 返回一个大于等于0.0,小于1.0的double值,可以使用强制类型转换实现 (int)(Math.random()*100)+1

-------------------------------------------------------------------------------------------------------------------

面向对象的代码块

用大括号括起来的部分,根据位置和声明不同可以分为

局部代码块:在方法中出现,限定变量的生命周期,及早释放,提高内存利用率,除了括号变量就会释放掉

构造代码块(初始化块):在类中方法外出现,多个构造方法中相同的代码存放在一起,每次创建对象都会调用构造代码块执行,并且在构造方法前执行

静态代码块:在类中方法外出现,加Static修饰,用于对类初始化,在加载过程中执行,并且只执行一次操作(优先级高于main)

同步代码块:多线程

---------------------------------------------------------------------------------------------------------------------

继承:

优势:提高代码的复用性

        提高代码的维护性

        让类和类之间产生了关系,是多态的前提

弊端:类的耦合性增强了(耦合是类与类之间的关系,内聚是类完成事物的能力)

this 和super的区别

this 代表当前对象的引用,调用本类的成员变量,也可以调用父类的成员变量,但是就近原则,有子类不用父类

super 调用父类的成员变量  调用super()必须写在子类构造方法的第一行,否则编译不通过。

super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。

this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。 尽管可以用this调用一个构造器,但却不能调用两个。

this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。

从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。

创建子类的构造方法时,要先调用super(),去执行父类的构造方法

1、jvm调用main方法,main进栈

2、会先将父类编译文件,和子类编译文件分别加载进内存中,再创建对象

3、当父类编译文件加载至内存,父类的静态代码块会随着父类编译文件一起加载

4、当子类编译文件加载至内存,子类的静态代码块会随着子类编译文件一起加载

5、先输出父类静态代码块 在输出子类静态代码块

6、运行子类构造方法,因为java是分层初始化,先初始化父类,再初始化子类,固先运行父类构造,但是在执行父类构造时,发现父类有构造代码块,构造代码块优先于构造方法执行

7、第三个输出父类构造代码块,第四个输出父类构造方法

8、第五个输出子类构造代码块,第六个输出子类构造方法

--------------------------------------------------------------------------------------------------------------------

继承中的成员方法关系:

子类方法可以调用父类方法,同名方法的话,优先调用子类方法,若要调用父类方法,使用super.

方法重写,子父类出现了相同方法

注意事项:

  1、父类中私有方法不能被重写

  2、子类重写父类方法,访问权限不能更低,最好一致

  3、父类中的静态方法,子类也必须通过静态方法重写(静态只能覆盖静态)----》不算是方法重写


-------------------------------------------------------------------------------------------------------------------

Override 和 Overload区别,Overload能改变返回值类型吗?

Overoload可以改变返回值类型,只看参数列表,其中重载方法名一样,参数列表不一样,和返回值类型无关

Override 子类和父类方法名一模一样,返回值也一致

--------------------------------------------------------------------------------------------------------------------

final关键字

特点:

1、修饰类,类不能被继承

2、修饰变量,变量变为常量且只能被赋值一次

3、修饰方法,方法不能够被重写

补:常量命名规范,多个单词采用下划线隔开,一个单词使用全大写字母

先写Static 再写Final

注意 基本数据类型:值不变

      引用数据类型:地址值不能改变,对象中的属性可以改变(不可以再new 但是可以修改属性值)

final修饰初始化变量的时机 1、显示初始化 2、在对象构造完毕前即可

final必须是有赋值的变量,若没有赋值则有问题,即默认初始化值是无效值

你可能感兴趣的:(Java基础笔记总结(4)-面向对象编程(构造方法,继承,this和super,final,方法重写))