/*关键字 static*/
/* 定义一个人类
姓名和年龄都是变化的,这个我能接受,因为每个人的姓名和年龄是不同的
但是,我们现在选取的几个人都是中国人,他们的国籍是一样的
一样的国籍,每次创建对象,在堆内存都要开辟这样的空间
我就觉的有点浪费。针对多个对象有共同的这样的成员变量值的时候
Java就提供了一个关键字来修饰:static
*/
class Person{
//姓名
private String name;
//年龄
private int age;
//国籍
private String country;
//构造方法
public Person(){};
public Person(String name,int age,String country){
this.name = name;
this.age = age;
this.country = country;
}
public void show(){
System.out.println("姓名:"+name+",年龄:"+age+",国籍:"+country);
}
}
class PersonDome{
public static void main(String[] args){
//创建对象1
Person p1 = new Person("唐僧",20,"大唐");
p1.show();
//创建对象2
Person p2 = new Person("孙悟空",1000,"大唐");
p2.show();
//创建对象3
Person p3 = new Person("猪八戒",500,"大唐");
p3.show();
}
}
/*static的特点:(它可以修饰成员变量和成员方法)
A:随着类的加载而加载
B:优先于对象的存在
C:被类的所以对象共享
其实这个特点也在告诉我们什么时候使用静态
如果某个成员变量是被所有对象共享,那么它就应该使用静态
D:它可以通过类名调用
其实它本身也可以通过对象名调用
推荐使用类名调用
静态修饰的内容一般我们称其为:与类相关的,类成员
非静态的称为对象成员
*/
class Student{
//非静态变量
int num = 10;
//静态变量
static int = 20;
}
class StudentDemo{
public static void main(String[] args){
Student s = new Student;
System.out.println(s.num);
//直接类的调用
System.out.println(Student.num2);
//对象名的调用
System.out.println(s.num2);
}
}
/*
static的注意事项
A:在静态方法中是没有this关键字的
如何理解?
静态是随着类的加载而加载的,this是随着对象的创建而存在
静态比对象先存在。
B:静态方法只能访问静态成员变量和静态成员方法
静态方发:
成员变量:只能访问静态变量
成员方法:只能访问静态成员方法
非静态方法:
成员变量:可以是静态的,也可以是非静态的
成员方法:可以是静态的成员方法,也可以是非静态的成员方法
简单记:
静态只能访问静态,非静态的可以访问一切
*/
class number{
//非静态的变量
public int num = 10;
//静态的变量
public static int num2 = 20;
//非静态的方法
public void show(){
System.out.println(num);//隐含的告诉你访问的是成员变量
System.out.println(this.num);//明确的告诉你访问的是成员变量
System.out.println(num2);
}
//静态的方法
public static void method(){
//无法从静态上下文中引用非静态的 变量 num
System.out.println(num);//编译错误
System.out.println(num2);
}
}
class numberDome{
public static void main(String[] args){
//创建对象
Number n = new Number();
n.show();//输出结果;10,10
n.methon();//输出结果;20
System.out.println("---------");
n.show();//输出结果;10,10,20
}
}
Java关键字static概述,特点,使用时的注意事项
最新推荐文章于 2021-11-30 10:44:16 发布