java:代码块

代码块

在这里插入图片描述

public class Person {

    String name;
	static int age;
	
	public Person(){
		this.name="张三";
		System.out.println("执行的构造方法的代码块");
	
		
	}
	//非静态代码块
	{
		System.out.println("执行的是非静态代码块1");
	}
	{
		System.out.println("执行的是非静态代码块2");
	}
	{
		System.out.println("执行的是非静态代码块3");
	}
	{
		System.out.println("执行的是非静态代码块4");
	}
	
	//静态代码块
	//在实际开发中,静态代码块用的多一点,用在初始化类的静态属性(static类型属性)
	static{
		//这里只能使用静态static修饰的属性和方法
		age=11;
		showAge();
	    System.out.println("......这里执行的是静态代码块........");
	}
	public static void showAge(){
		System.out.println(age);
	}
	
	
	
	public static void main(String[] args) {
		new Person();
		new Person();
		
	}
}
11
......这里执行的是静态代码块........
执行的是非静态代码块1
执行的是非静态代码块2
执行的是非静态代码块3
执行的是非静态代码块4
执行的构造方法的代码块
执行的是非静态代码块1
执行的是非静态代码块2
执行的是非静态代码块3
执行的是非静态代码块4
执行的构造方法的代码块

在这里插入图片描述
在这里插入图片描述

简单属性不需要这么麻烦,例如直接static int age=1;不需要再搞个静态代码块给age=1;

如果是对象型属性呢????

public class TestPerson {
	int age;
	String name;

}
public class Person {

	String name;
	static int age;
	static TestPerson tp=new TestPerson();
	
	//静态代码块
		static{
			//这里只能使用静态static修饰的属性和方法


			//给TestPerson里面东西重新设置
			tp.name="zx";
			tp.age=21;
		
		}

那非静态代码块能干嘛

public class Person{


......
//加一个test方法
public  void test(){
		System.out.println("Person的test方法");
	}
	}
	
public class Test{
	public static void main(String[] args) {

		//匿名内部类
		Person p=new Person(){//这是一个person的子类
			//??问题??现在想名字改成李四,但是不想动Person 的代码
			{
				//在匿名内部类中,用代码块代替构造方法
				super.name="李四";
			}
			@Override
			public void test() {
				System.out.println("--------");
			}
			
		};
		System.out.println(p.name);
		
		

在这里插入图片描述

在这里插入图片描述
代码块在匿名内部类的使用是无可替代的,匿名类你没有类名,就不能用构造,没有构造,就不能用其他办法来初始化==>用代码块来初始化

发布了45 篇原创文章 · 获赞 12 · 访问量 1119

猜你喜欢

转载自blog.csdn.net/weixin_46037153/article/details/104458733
今日推荐