当前位置 博文首页 > 程序员A的博客:JAVA静态方法使用注意事项

    程序员A的博客:JAVA静态方法使用注意事项

    作者:[db:作者] 时间:2021-06-13 21:35

    
    /*
    静态方法使用注意事项:
    1,静态方法不能访问非静态的成员。
    	但是非静态可以访问静态成员的。
    	说明:静态的弊端在于访问出现局限性。好处是可以直接被类名调用。
    
    2,静态方法中不允许出现this,super关键字。
    
    
    为什么不行呢?
    原理揭秘:
    1,静态是随着类的加载就加载了。也是随着类的消失而消失了。
    2,静态优先于对象存在,被对象共享。
    3,因为静态先存在于内存中无法访问后来的对象的中的数据,所以静态无法访问非静态。
    而且内部无法书写this。因为这时对象有可能不存在,this没有任何指向。
    
    
    
    
    
    */
    
    class Person
    {
    	private String name;
    	private int age;
    
    	Person(String name,int age)
    	{
    		this.name = name;
    		this.age = age;
    	}
    	public void speak()
    	{
    		System.out.println("name="+this.name+",age="+this.age);
    		sleep();
    	}
    
    	//定义一个睡觉功能。
    	public static void sleep()
    	{
    //		System.out.println(name);
    		System.out.println("睡觉zzzZZZZ");
    	}
    }
    
    class PersonDemo 
    {
    	public static void main(String[] args) 
    	{
    
    
    //		Person p = new Person("lisi",20);
    //		p.speak();
    		/*
    		创建对象就是为了产生实例,并进行数据的封装。
    		而调用功能时,确没有用到这些对象中封装的数据。
    		该对象的创建有意义吗?虽然可以编译并运行,但是在堆内存中空间较为浪费。
    
    		不建议创建对象。那该怎么调用呢?java中的解决方案就是 使用 static关键字,这是一个成员修饰符。
    		被静态static修饰的方法除了可以被对象调用外,还可以被类名调用。
    		静态看上去很美,是不是所有的方法都静态呢?不行!
    
    		那么什么时候需要将方法定义成静态的呢?
    		定义功能时,如果功能不需要访问类中定义的成员变量(非静态)时,该功能就需要静态修饰。
    
    		*/
    //		p.sleep();
    		Person.sleep();
    	
    	}
    }
    

    下一篇:没有了