#JAVA#面向对象(static关键字)
package static关键字;
/*
定义一个人类
姓名和年龄都是不同的,但选取的国籍都是一样的,每次创建对象,在堆内存都要开辟这样的空间,浪费
针对多个对象有共同的成员变量值时,JAVA就提供了一个关键字来修饰:static
*/
class person{
//姓名
String name;
//年龄
int age;
//国籍
static String country;
public person() {
}
public person(String name,int age) {
this.name=name;
this.age=age;
}
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 personDemo {
public static void main(String args[]) {
//创建对象1
person p=new person("***",33,"中国");
p.show();
//创建对象2
person p1=new person("&&&",27,"中国");
p1.show();
//创建对象3
person p2=new person("%%%",35);
p2.show();
p2.country="美国";
p2.show();
p.show();
p1.show();
}
}
运行结果:
姓名:***,年龄:33,国籍:中国
姓名:&&&,年龄:27,国籍:中国
姓名:%%%,年龄:35,国籍:中国
姓名:%%%,年龄:35,国籍:美国
姓名:***,年龄:33,国籍:美国
姓名:&&&,年龄:27,国籍:美国
package static关键字;
/*
static的特点:(它可以修饰成员变量,还可以修饰成员方法)
A:随着类的加载而加载
回想main方法
B:优先于对象存在
C:被类的所有对象共享
举例:同一班级的学生应该共用同一班级编号
其实这个特点也是再告诉我们什么时候使用静态
如果某个成员变量或者方法是被所有对象共享的,那么它就应该定义为静态的
举例:
饮水机(用静态修饰)
水杯(不能用静态修饰)
D:可以通过类名调用,其实它本身也可以通过对象名调用
推荐使用类名调用
静态修饰的内容一般我们称其为:与类相关的,类成员
*/
class student{
//非静态变量
int num=10;
//静态变量
static int num2=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);
}
}
package static关键字;
/*
static关键字注意事项
A:在静态关键字中是没有this关键字的
因为静态是随着类的加载而加载,this是随着对象的创建而存在
静态比对象先存在
B:静态只能访问静态的成员变量和静态的成员方法
静态方法:
成员变量:只能访问静态变量
成员方法:只能访问静态成员方法
非静态方法:
成员变量:可以是静态的,也可以是非静态的
成员方法:可以是静态的成员方法,也可以是非静态的成员方法
总结:静态只能访问静态
*/
class Teacher{
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);
function();
function2();
}
public static void method() {
//System.out.println(num);错误
System.out.println(num2);
//function(); 错误
function2();
}
public void function() {
}
public static void function2() {
}
}
class TeacherDemo {
public static void main(String args[]) {
//创建对象
Teacher t=new Teacher();
t.show();
t.method();
System.out.println("------");
}
}