static关键字、代码块、内部类的使用

static关键字

/**
 * static关键字的使用
 * 
 * 1.static:静态的
 * 2.static可以用来修饰:属性,方法,代码块,内部类 
 *   
 * 3.使用static修饰属性:静态变量(或类变量)
 * 3.1属性,按是否使用static修饰,又分为:静态属性vs非静态属性(实例变量)
 * 实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性,当修改其中一个对象中非静态属性时,不会导致其他对象中同样的属性值的修改
 * 静态变量:我们创建了类的多个对象,多个对象共享同一个静态变量,当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的
 * 3.2 static修饰属性的其他说明:
 * 1.静态变量随着类的加载而加载,可以通过类.静态变量的方式进行调用
 * 2.静态变量的加载要早于对象的创建
 * 3.由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中
 * 4.      类变量    实例变量
 * 类名              yes    no
 * 对象              yes    yes
 * 
 * 3.3静态属性举例:Math.PI
 * 
 * -----------------------------------------------------------------------------------------------------------------
 * 
 * 4.使用static修饰方法:静态方法
 * 1.随着类的加载而加载,可以通过类.静态方法的方式进行调用
 * 2.       静态方法     非静态方法
 * 类名                   yes     no
 * 对象                   yes     yes
 * 3.静态方法中,只能调用静态的方法或属性
 *   非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性
 * 
 * 5.static注意点:
 * 5.1 在静态的方法内,不能使用this关键字,super关键字
 * 5.2 关于静态属性和静态方法的使用,大家都从生命周期的角度去理解
 * 
 * ----------------------------------------------------------------------------------------------------------------------
 * 6.开发中,如何确定一个属性是否要声明为static的?
 * 1.属性是可以被多个对象所共享的,不会随着对象的不同而不同的
 * 2.类中的常量也常常声明为static
 * 
 * 开发中,如何确定一个方法是否要声明为static的?
 * 1.操作静态属性的方法,通常设置为static的
 * 2.工具类中的方法,习惯上声明为static的. 比如:Math Arrays Collections
 * 
 */

代码块

package com.up;

/**
 * 
 *类的成员之四:代码块(或初始化块)
 *
 * 1.代码块的作用:用来初始化类,对象
 * 2.代码如果如果有修饰的话,只能使用static
 * 3.分类:静态代码块 vs 非静态代码块
 * 
 * 4.静态代码块
 *   >内部可以有输出语句
 *   >随着类的加载而执行,只执行一次
 *   >作用:初始化类的信息
 *   >如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行
 *   >静态代码块的执行要优先于非静态代码块
 *   >静态代码块内只能调用静态的属性,静态的方法,不能调用非静态的方法
 *   
 * 
 * 
 * 
 * 5.非静态代码块
 *   >内部可以有输出语句
 *   >随着对象的创建而执行,每创建一个对象,就执行一次非静态代码块
 *   >作用:可以在创建对象时,对对象的属性等进行初始化
 *   >如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行
 *   >非静态代码块内可以调用静态的属性,静态的方法,或非静态的属性,非静态的方法
 *   
 */
public class Person {
	
	int age;
	
	
	static String desc = "aaaa";
	
	
	static{
		System.out.println("静态代码块 - 1");
		
		desc = "bbbbb";
		
		eat();
		
	}
	
	static{
		System.out.println("静态代码块 - 2");
	}
	
	
	{
		System.out.println("非静态代码块 - 1");
		
		desc = "c";
		age = 20;
		
		eat();
		info();
	}
	
	{
		System.out.println("非静态代码块 - 2");
	}
	
	public static void eat(){
		
	}
	
	public void info(){
		
	}

}

内部类

/**
 * 类的内部成员之五:内部类 
 * 1.Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类 
 * 2.内部类的分类:成员内部类(静态,非静态) vs 局部内部类(方法内,代码块内,构造器内)
 * 
 * 3.成员内部类:
 *   一方面,作为外部类的成员:
 *         >调用外部类的结构
 *         >可以被static修饰
 *         
 *   另一方面,作为一个类
 *         >类可以定义属性,方法,构造器等
 *         
 * 4.关注如下的3个问题
 * 4.1 如何实体化成员内部的对象
 * 4.2 如何在成员内部类中区分调用外部类的结构
 *         
 * 
 */
发布了93 篇原创文章 · 获赞 31 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43866567/article/details/96888934