javase day09

static(静态)
关键字-----修饰符 变量、方法、代码块、内部类
修饰变量(静态变量)
静态变量随着类加载(方法区的静态常量池)而加载到方法区的静态区,静态区会对 存储的静态变量进行系统默认初始值的赋值。静态变量与类同级,也叫类变量,可以通过类名.静态变量也可以通过创建对象调用。静态变量所在的类创建的所有的对象都拥有唯一一个静态变量所在区域的地址值,所有的对象都共享这个静态变量
如果属性要被共享就可以用static修饰

在这里插入图片描述

静态变量可以定义在方法中?不可以 静态变量与类同级,方法被调用里面的内容才加载执行
静态变量可以定义在构造方法中?不可以 静态变量与类同级,构造方法与对象同级,类优先于对象
修饰方法(静态方法)
静态方法是随着类的加载而加载到方法区的静态区,不会对静态方法进行赋值,如果这个静态方法被调用就会被加载到栈中执行。静态方法与类同级,类方法,可以通过类名.静态方法名调用,也可以通过对象调用

静态方法可以定义静态变量?不可以 静态变量与类同级从一开始就要加载,静态方法里的内容需要等到调用时才能加载和执行
静态方法中可以使用this?不可以 静态方法是与类同级,this与对象同级

注意:
静态方法不能直接调用非静态属性/变量也不能直接调用非静态的方法
非静态方法可以直接调用静态属性/变量,也可以直接调用静态方法
常见:
Arrays.toString()
Arrays.sort()
Array.copyOf()
System.arraycopy()
System.out.println();-----不是静态方法

静态方法可以重载?可以重载
静态方法可以重写?不可以—静态方法与类同级,重写针对的是对象级别;重写是运行时多态的体现形式,运行时期进行代码绑定,代码绑定是由对象确定的;静态方法先于对象存在,重写只针对的是对象级别,静态方法没有重写
证明:1、调用m方法如果走子类方法就是重写(最好用向上造型的对象去调用,直接用子类构造方法创造的子类对象去调用可能出错)
2、注解–@override代表下面的方法是重写方法

注意:
Java中允许父子类中存在方法签名一致的静态方法但是没有重写
Java中方法签名一致的方法要么都是静态方法要么都是非静态方法

修饰代码块
在这里插入图片描述

在这里插入图片描述
成员属性和构造代码块一个级别,谁在前谁先执行

package cn.com;
/**
*@author 作者:
*@version 创建时间:2020年9月27日上午10:40:51
*@description 描述:static 父子类、构造方法、构造代码块的先后顺寻
*/
public class GzDemo1 {
		public static void main(String[] args) {
			SB sb=new SB();
		}
}
class SA{
	//static SD sd=new SD();//----只加载一次
	//成员属性和代码块一个级别,谁在前谁先执行
	SD sd=new SD();//属性---要赋值
	static int i =10;//属性
	static {
		System.out.println("SA1");
	}
	{
		System.out.println("SA2");
	}
	public SA() {
		System.out.println("SA3");
	}
}
class SB extends SA{
	
	static {
		System.out.println("SB1");
	}
	{
		System.out.println("SB2");
	}
	public SB() {
		System.out.println("SB3");
	}
}
class SC{
	public SC() {
		System.out.println("SC");
	}
}
class SD extends SC{
	public SD(){
	System.out.println("SD");
}
}


面试题:
在这里插入图片描述
面试例题:
在这里插入图片描述
在这里插入图片描述
将 static STDemo st=new STDemo()改为STDemo st=new STDemo()-----报错----StackOverflowError
在这里插入图片描述
在这里插入图片描述

fianl(最终)
关键字-----修饰符 数据、方法、类
修饰数据(最终值)
如果修饰基本数据类型数据,值不能改变
如果修饰的是引用数据类型地址值不能改变,元素值可以改变
如果成员变量被final修饰且没有给值,要保证在创建对象之前给值 代码块{}、构造方法
如果成员变量被static和final共同修饰(静态常量),要保证在类加载完成之前给值静态代码块static{}
在这里插入图片描述
修饰方法(最终方法)
可以重载?可以
可以重写?不可以
修饰类(最终类)
这个类不能被继承,但可以有父类

class A{
	static final int y;//静态区的初始值仅仅只是标记是初始值,没有实际含义
	static {
		y=1;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值