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、 非静态方法既可以访问静态成员变量,也可以访问非静态成员变量,既可以访问静态成员方法,也可以访问非静态成员方法
主方法的格式:
publicstatic void main(String[] args)
public:被jvm调用,权限足够大
static:被jvm调用,不需要创建对象,直接调用即可
【Java基础笔记总结(4)-面向对象编程(构造方法,继承,this和super,final,方法重写)】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必须是有赋值的变量,若没有赋值则有问题,即默认初始化值是无效值

    推荐阅读