JAVA中的面向对象2

代码块

构造代码块

会在每一次创建对象时调用,构造代码块是先与构造方法执行的。
使用方法:直接在类中提供一个{}

局部代码块

在方法中提供一个{}
局部代码块可以提高栈内存的效率,可以提前释放局部的变量内存。

继承

把原有类中的公共的代码抽取到一个新类中,原有类和新类使用extends关键字进行联系。新类称之为父类,原有类称之为子类,子类会继承父类所有的属性和方法。但是子类只能使用对子类可见的属性方法。

格式

子类 extens父类
继承可以提高代码的复用率
java有多层继承,没有多继承

权限修饰符

权限修饰符本类子类同包类其他类
public可以可以可以可以
protected可以可以可以不可以
default可以同包子类可以不可以
private可以不可以不可以不可以

Super

super关键字可以调用父类可见的方法和属性
当创建子类对象时,会默认去调用父类的构造方法
可能报错:Implicit super constructor 类名() is undefined. Must explicitly invoke another constructor注意有参和无参调用的方法。
super():调用父类的无参构造,super()代码必须放在方法的第一行
this():调用本类的构造方法,必须放在有效代码第一行
所以说super()和this()不能共存。

Override

在父子类中出现了方法签名一致的非静态方法,就称之为重写(Override)
重要的“两小一大”原则

  1. 方法签名一致
  2. 如果方法的返回值的类型是基本数据类型/void,那么子类中的方法的返回值类型必须和父类的返回值类型保持一致。
  3. 子类重写的方法的权限修饰符,必须要比父类方法的权限修饰符范围更大或相等。
  4. 如果父类方法的返回值类型是引用数据类型,那么子类方法的返回值类型要么和父类的返回值类型一致,要么是父类返回值类型的子类。

多态

事物的多种形态
编译时多态:方法的重载
运行时的多态:方法的重写 向上造型

Static静态

可以修饰变量、方法、代码块
静态变量:使用static修饰的变量,又称之为类变量。可以使用 类名.变量名 来调用静态变量。
静态变量是随着类的加载是加载到方法区的,是先于对象出现的,在方法区中会有一个默认值。不同的对象使用的静态变量是同一个。可以使用类名直接访问。

类是加载到方法区的
类是第一次使用时才加载
类只加载一次

静态变量不可以在构造方法中

静态方法

使用static修饰的方法称之为静态方法。静态方法会随着类的加载而加载到方法区中,当静态方法被0调用时,区栈中执行。静态方法也是先于对象而存在的。可以使用 类名.静态方法名() 的形式调用。

静态方法中可以适应this/super吗? ----->不可以
静态方法中可以调用本类的非静态方法吗?----->不可以、在本类中调用demo()相当于this.demo,
因为静态方法中不可以使用this,所以静态方法不能调用非静态方法

静态方法可以被继承吗? ----->可以

静态方法可以被重写吗?------>不可以 如果父子类中出现了同名的静态方法,称之为隐藏(hide)。
如果父子类中有同名方法,要么都是静态(隐藏),要么都是非静态(重写)
因残也遵循“两等两小一大”原则

静态代码块:被static修饰的{}静态代码块随着类的加载而加载,会在加载类是调用。静态代码块在栈中执行的。

案例:统计当前类创建对象的个数。

package staticdemo;

public class StaticCodeDemo {
	public static void main(String[] args) {
		// 匿名对象
		new Person1();
		new Person1();
		new Person1();
		new Person1();
		System.out.println("执行了"+ Person1.i);
	}
}

class Person1{
	
	static int i = 0;
	// 构造代码块
	{
		i++;
	}
	static {
		System.out.println("静态代码块执行了...");
	}
}

静态代码块 构造代码块 构造方法执行顺序
父类静态——>子类静态——>父类非静态——>子类非静态

类加载的过程
java通过编译生成class文件,经过类加载器将class文件加载成字节码文件区执行

加载:将字节码文件加载到内存中

校验:检查字节码的安全性

准备:会给静态变量开辟内存空间,并且设定一个标记值。标记值可能会被舍弃

解析

初始化:开始执行静态代码块和静态变量赋值的代码。没有特定的顺序,那行代码在上就先执行

在标记值状态下,不能进行直接操作,但是可以执行引用操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值