Java SE基础知识(7)

面向对象–创建一个对象的过程

课外阅读

java: new一个对象的的过程中发生了什么? 加载类并创建和初始化对象;

双亲委托机制:能够确保一个类的全局唯一性

区分类的唯一性:包名+类名

Static的应用

static:静态的,可以修成员变量和成员方法。修饰成员变量,此变量就为一个共享变量,会被这个类的所有对象共享。

静态的变量,通过类名直接调用变量。

特点:

1.随着 类class 的加载而加载;

2.static 所修饰的成员,是优先于对象而存在的;

3.被 类的所有对象所共享;

4.被静态所修饰的成员,是属于类的,建议使用类型直接调用,当然你可以使用对象来调用,但是不推荐。

定义静态的方法

**1.在静态方法中,不能调用非静态方法;**被静态所修饰的对象(静态所修饰的成员)是随着类的加载而加载的,是优先于对象而存在的。先有的访问不到后有的。

2.在静态方法里,调用不到非静态的成员,只能访问静态成员,不能访问非静态成员。

3.在静态方法中,不能存在this关键字。

原因:this 本身代表的是该类的对象,而对象是后来才有的。

非静态方法

非静态方法中,即可以访问非静态成员,也可以访问静态成员;

静态方法:

​ public static void hehe ( ){

​ }

非静态方法:

​ public void haha ( ){

​ }

**注意:**对于提供main方法作为成员入口的类,在这个类中个,我们一般不去定义成员变量和成员方法。

**问题:**为什么main方法需要用public static 修饰?

方便虚拟机来调用

### 静态变量和成员变量的区别

1.静态变量属于类,也成为类变量;成员变量属于对象,也称之为对象变量,或实例变量。

2.静态变量储存在方法区的静态区,成员变量存储在堆内存。

3.静态变量,随着类的加载而加载,随着类的卸载和卸载。成员变量随着对象的创建而产生,随着对象的消失而消失。

4.静态变量,可以使用对象名调用,也可以使用类名调用,推荐使用类名调用

5.成员变量,只能使用对象名来调用。

Math——java中的一个类

补充例题:(猜数字)

代码块:所谓代码块,就是被大括号{}所括起来的代码

分类

  • 局部代码块、

  • 构造代码块、

  • 静态代码块、

  • 同步代码块(多线程)

局部代码块:定义在方法中的代码块,有利于资源的释放。

​ psvm( ){

​ }

构造代码块: 定义在类中方法外的代码块 ,构造代码块先执行

​ 在创建对象时,构造代码块会执行,而且优先于构造方法执行。

​ public student( ) {

​ sout(“构造代码块,每次创建对象时都会实行,而且优先于构造方法执行。”)

​ }

**静态代码块:**定义在类中方法外的代码块,且被静态所修饰,随着类的加载而加载,最早加载,且只执行一次。因为类只加载一次。静态代码块里只能访问被静态所修饰的。我们经常会在静态代码块中做一些初始化的准备工作。

​ static {

​ }

面向对象的三大特点——继承

封装(class),继承,多态

Java中的继承:子类可以继承父类的成员(成员变量和成员方法)

如何让类和类之间形成父子继承关系,使用关键字extends

继承的优点:提高代码的复用性和维护性

继承的弊端:让类和类之间产生关系,那就增加了耦合性。

程序的设计原则:高内聚(一个类,独立完成某个功能的能力),低耦合

​ 耦合(类和类中间有一种关系。)

Java中的继承特点
  • Java中支持单继承,一个子类只能有一个父类,但是支持多层继承;

  • Java中子类只能继承父类非私有的成员;

  • 子类不能继承父类的构造方法 ,构造方法参与继承。

  • 不要为了部分功能区继承

    解释:继承就是把多个子类的共性部分向上抽取到父类当中,以实现代码的复用性和维护型

    当多个变量重名时:

    1.当成员变量和局部变量重名时,我们的变量访问原则遵循就近原则,现在局部范围内找(方法内和形参)。

    2.如果找不到,就去该类的成员范围找,找到就使用。

    3.如果在该类的成员范围内还是没有找到,那就去该类的父类成员范围找。

Super

  • super 代表父类空间的一个标识,你可以认为是父类的一个对象,可以使用super区访问父类的数据

  • super( ) 访问父类的空参构造。super(int m) 访问父类的有参构造;

  • super.成员变量名 访问父类的成员变量。

  • super.成员方法 访问父类的成员的方法。

  • 在每个类的构造方法中的第一行,会有一个super(); 回去调用父类的空参构造,来完成父类数据的初始化;

  • java继承体系中的顶层父类是Object类,所有类都是直接或间接继承自他;

  • 如果说父类没有空参构造,怎么办?

    1.那就想办法调用父类的有参构造。即,在子类中super(int m) 访问父类的有参构造;

    2.如果子类有参数,那就间接的使用 this( )调用本类的有参构造,但这时候就没有super();语句了,二者不可共存与第一行。

This

this 代表本类的一个引用,你可以认为是本类的一个对象;

this ( ) 访问本类的空参构造;

this.成员变量 访问本类的成员变量;

this.成员方法 访问本类的成员方法;

方法重写

当子类出现了和父类一模一样的方法的时候(方法名,方法参数,返回值类型一样)就会出现方法覆盖的现象,即子类的方法会覆盖父类的方法。

### 为什么需要方法重写机制的出现?

子类对父类的方法实现并不是很满意,需要扩展或者覆盖方法,此时就需要方法重写机制。

ctro+o 重写父类的方法

Override 注解:用来检测这个方法是不是重写父类的。

重写时注意事项

1.父类私有的方法不能重写;私有方法不能继承,何谈重写。

2.构造方法不参与重写;

3.子类在重写父类方法时,方法的权限修饰符(访问权限),不能比父类的方法低,要么和父类方法的权限一样,或者比他高。public>protected>缺省>private

4.静态方法不参与重写;

Final 最终的

  • final 最终的,可以修饰变量,方法,类

  • final修饰变量,此变量为一个常量。

  • final修饰方法,此方法不能被重写。

  • final修饰类,此s类不能被继承。

  • final修饰引用类型 final fu = new fu( ); 这个地址值不能被改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值