13static关键字(java)

2021-06-28 08:04

阅读:710

标签: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);
}
}

技术分享图片

 

13static关键字(java)

标签:new t   类变量   override   java   有一个   name   类的方法   情况下   setname   

原文地址:https://www.cnblogs.com/Mrchengs/p/9649616.html


评论


亲,登录后才可以留言!