标签:new t 类变量 override java 有一个 name 类的方法 情况下 setname
static成员变量:
Java类提供了两种类型的变量:用static关键字修饰的静态变量和不用static关键字修饰的实例变量。静态变量属于类,在内存中只有一个复制,只要静态变量所在的类被加载,这个静态变量就会被分配空间,因此就可以被使用了。对静态变量的引用有两种方式,分别是“类.静态变量"和”对象.静态变量"
实例变量属于对象,只有对象被创建后,实例变量才会被分配内存空间,才能被使用,它在内存中存在多个复制,只有用“对象.实例变量”的方式来引用。
多个复制:从最开始加载(存在方法区),别实例化(存在堆中),被调用(存在栈中)
static成员方法:
Java中提供了static方法和非static方法。static方法是类的方法,不需要创建对象就可以被调用,而非static方法是对象的方法,只有对象被创建出来后才可以被使用
static方法中不能使用this和super关键字,不能调用非static方法,只能访问所属类的静态成员变量和成员方法,因为当static方法被调用时,这个类的对象可能还没被创建,即使已经被创建了,也无法确定调用哪个对象的方法。同理,static方法也不能访问非static类型的变量
静态与非静态的区别:
非静态成员变量又称为实例变量。
静态成员变量又称为类变量。
非静态成员变量,随着对象的创建而存在,随着对象的消失而消失。
静态成员变量,随着类的加载而存在,随着类的消失而消失。
非静态变量存在于对象堆内存中。
静态变量存在于方法区中。
非静态变量只能被对象所调用。
静态变量可以被类名调用,也可以被对象调用。
/////////////////////
public class Chinese {
	private static String country;
	private String name;
	private int age;
	public Chinese(String country, String name, int age) {
		super();
		this.country = country;
		this.name = name;
		this.age = age;
	}
	public Chinese() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "Chinese [country=" + country + ", name=" + name + ", age=" + age + "]";
	}
	public String getCountry() {
		return country;
	}
	public void setCountry(String country) {
		this.country = country;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}
/////////////////////
public class TestChinese {
public static void main(String[] args) {
Chinese c1 = new Chinese("唐", "小明", 12);
System.out.println(c1);
Chinese c2 = new Chinese("唐", "小明", 12);
System.out.println(c1);
System.out.println(c2);
}
}
///////////////////////////////
public class TestStatic {
	//1.static 是一个关键字,用于修饰类成员(属性,方法,内部类)
	//2.若访问权限允许的情况下,可以通过类名 . 的情况来访问,可以不创建对象
	//3.static修饰的成员为类成员,为所有实例共享
	//4.static方法内部只能访问类的static属性,不能访问非static属性
	//5。因为不需要实例化就可以访问static属性和方法,因此不能用this在static内部
	//6.静态代码块在初始化时执行一次,只执行一次
	static String name;
	int age;
	static void test(){
		//static修饰的内部类不能访问非static属性
		//age = 1;//报错
		name = "qwe";
	}
	static{
		System.out.println("静态代码块");
	}
	void method(){
		//可以访问非static和非static修饰的属性
		age = 12;
		name = "qwe";
				
	}
	
	public static void main(String[] args) {
		//有无对象都可以直接访问static修饰的对象
		
		TestStatic.name = "";
		TestStatic.test();
		
		TestStatic t = new TestStatic();
		t.age = 12;
		t.name = "qwe";
		t.method();
		System.out.println(t.name);
		TestStatic t1 = new TestStatic();
		//通过t的实例对象不许呀再次赋值
		System.out.println(t1.name);	
	}
}

标签:new t 类变量 override java 有一个 name 类的方法 情况下 setname
原文地址:https://www.cnblogs.com/Mrchengs/p/9649616.html