zoukankan      html  css  js  c++  java
  • 《java入门第一季》之面向对象(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);//用对象名调用,以前的方式,天经地义
    	}
    }


    /*
    	定义一个人类
    	
    	姓名和年龄都是变化的,这个能接收,因为每个人的姓名和年龄是不同的。
    	但是,现在选取的几个人都是中国人,他们的国籍是一样的。
    	一样的国籍,每次创建对象,在堆内存都要开辟这样的空间,
    	我就觉得有点浪费了。怎么办呢? 
    		针对多个对象有共同的这样的成员变量值的时候,
    		Java就提供了一个关键字来修饰:static。
    		static修饰的变量或者方法被所有的对象共用
    */
    class Person {
    	//姓名
    	String name;
    	//年龄
    	int age;
    	//国籍
    	//String country;
    	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 p1 = new Person("邓丽君",16,"中国");//静态修饰的变量只需要赋值一次就可以了。
    		p1.show();
    		
    		//创建对象2
    		//Person p2 = new Person("杨幂",22,"中国");
    		//p2.show();
    		Person p2 = new Person("杨幂",22);
    		p2.show();
    		
    		//创建对象3
    		//Person p3 = new Person("凤姐",20,"中国");
    		//p3.show();
    		Person p3 = new Person("凤姐",20);
    		p3.show();
    		System.out.println("-----------------");
    		p3.country = "美国";//静态的修改了,其他在调用的时候都会修改
    		p3.show();
    		
    		p1.show();
    		p2.show();
    	}
    }

    /*
    	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); //明确的告诉你访问的是成员变量,this该类中的成员变量
    		System.out.println(num2);//非静态方法中可以访问静态的变量
    		
    		function();
    		function2();//非静态的方法中可以访问静态的方法
    	}
    	
    	public static void method() {//静态方法
    		//无法从静态上下文中引用非静态 变量 num
    		//System.out.println(num);//静态不可以引用非静态的
    		//System.out.println(this.num);//无法从静态上下文中引用非静态 变量 this.就是说在静态方法中是没有this关键字的
    		System.out.println(num2);//静态方法访问静态的成员变量和静态的成员方法,这里不报错
    		
    		//无法从静态上下文中引用非静态 方法 function()
    		//function();//静态不可以引用非静态的方法
    		function2();//静态方法访问了静态的成员方法不会报错
    	}
    	
    	public void function() {//非静态,只可以被非静态方法访问
    	
    	}
    	
    	public static void function2() {//静态的可以被静态方法访问也可以被非静态方法访问
    	
    	}
    }
    
    class TeacherDemo {
    	public static void main(String[] args) {
    		//创建对象
    		Teacher t = new Teacher();
    		t.show();
    		System.out.println("------------");
    		t.method();//静态的方法用对象来调用	,这是最原始的方式调用,天经地义
    		Teacher.method();//静态的方法用类名来调用,推荐使用这个语句,因为method为类Teacher下的静态方法。
    	}
    }


  • 相关阅读:
    Pytorch使用tensorboardX实现loss曲线可视化。超详细!!!
    numpy安装失败:numpy和cv2的版本不一样吧 pip安装/卸载
    问题解决:RuntimeError: CUDA out of memory.(....; 5.83 GiB reserved in total by PyTorch)
    前端刷题网站
    vscode如何使用ssh连接远程linux
    marginnote使用
    前端知识点
    HTTP状态码
    内置对象总结
    微信小程序
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299876.html
Copyright © 2011-2022 走看看