实例变量与类变量(静态变量)的定义与区别、实例方法与类方法(静态方法)的定义与区别

Java实例变量与类变量(静态变量)的定义:

1、在Java中 变量 分为 成员变量 与 局部变量 ;而 实例变量与类变量 都属于 成员变量;

2、类变量 也称为 static 变量、静态变量;

3、在声明成员变量时,用关键字 static 给予修饰的称为 类变量 ,否则称为 实例变量 ;

如下代码演示: test 属于 类变量 ;  testone 属于 实例变量 ;

public class Static_Test {

	//类变量与实例变量
	static int test ;   //类变量
	double testone ;     //实例变量

}

注意: static 关键字要放在变量类型的前面 ,如 : int static test ;   //是错误的

Java实例变量与类变量(静态变量)的区别:

一、不同对象的实例变量互不相同 ;

1、即分配给不同对象的实例变量,他们分别占有不同的内存空间,改变其中一个对象的实例变量不会影响其他对象的实例变量;

如下代码演示:

public class Static_Test {

	double testd;   //声明实例变量 testd

	public static void main(String[] args) {
		Static_Test st1 = new Static_Test();
		Static_Test st2 = new Static_Test();
		//测试不同对象的实现变量互不相同 ;
		st1.testd = 11.11 ;
		st2.testd = 111.111 ;
        System.out.println("对象st1的值="+st1.testd);
        System.out.println("对象st2的值="+st2.testd);
        //改变其中一个对象的实例变量的值
        st1.testd = 1.1;
        System.out.println("对象st1的值="+st1.testd);
        System.out.println("对象st2的值="+st2.testd);
	}

}

以上代码输出结果:

对象st1的值=11.11
对象st2的值=111.111
对象st1的值=1.1
对象st2的值=111.111

由此可见,改变了对象 st1 的实例变量 testd 的值为1.1 ,但是对象 ts2 的实例变量 testd 的值没有受到影响,还是 111.111

二、所有对象共享类变量 ;

1、即创建不同对象时,分配给这些对象的类变量占有相同的一处内存,改变其中一个对象的类变量也会影响其他对象的类变量;

如下代码演示:

public class Static_Test {

	//测试不同对象的类变量相同 ;
	static double test1 ;    //类变量test1

	public static void main(String[] args) {
		Static_Test st1 = new Static_Test();
		Static_Test st2 = new Static_Test();
  
        //测试不同对象的类变量相同 ;
        st1.test1 = 11.11 ;
          System.out.println("对象st1的值="+st1.test1);
          System.out.println("对象st2的值="+st2.test1);
	st2.test1 = 111.111 ;
	  System.out.println("对象st1的值="+st1.test1);
          System.out.println("对象st2的值="+st2.test1);
        
	}
}

以上代码输出结果:

对象st1的值=11.11
对象st2的值=11.11
对象st1的值=111.111
对象st2的值=111.111

由此可见,当改变其中一个对象的类变量也会影响其他对象的类变量;

三、通过类名直接访问类变量

1、即类中的类变量,在类被加载到内存时,就分配了相应的内存空间,而不会等类创建对象后才分配相应的内存空间;

2、实例变量则是等类创建对象后才分配相应的内存空间;

如下代码演示:

public class Static_Test {

	//测试不同对象的类变量相同 ;
	static double test1 ;    //类变量test1

	public static void main(String[] args) {
		Static_Test st1 = new Static_Test();
		
        //测试通过对象名来访问类变量
        st1.test1 = 11.11 ;
        System.out.println("对象st1的值="+st1.test1);
        //测试通过类名来访问类变量
        Static_Test.test1 = 123.123 ;
        System.out.println("对象st1的值="+st1.test1);
        System.out.println("类Static_Test的值="+Static_Test.test1);
        
	}
}

以上代码输出结果:

对象st1的值=11.11
对象st1的值=123.123
类Static_Test的值=123.123

 


Java实例方法与类方法定义:

1、在类中 方法 可分为 实例方法 与 类方法 ;

2、类方法 也称为 static 方法、静态方法;

3、在声明方法时,用关键字 static 给予修饰的称为 类方法 ,否则称为 实例方法;

如下代码演示: test 属于 类方法 ;  testone 属于 实例方法 ;

public class Static_Test {

	//类方法与实例方法
	static void test(){}   //类方法
	void testone(){}      //实例方法

}

注意: static 关键字要放在方法类型的前面 ,如 : void static test(){}    //是错误的

Java实例方法与类方法(静态方法)的区别:

一、对象调用实例方法 ;

1、即类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,只有该类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象进行调用;

2、实例方法中不仅可以操作实例变量,还可以操作类变量;

3、实例方法只能被对象进行调用,而类名不能调用;

如下代码演示:

public class Static_Method_Test {
	
	double number = 11.111;       //实例变量
        static double snumber = 1.1 ;  //类变量

	//方法中操作 实例变量,类变量
	void test1 (){
		number += 11.111 ;   
		snumber += 1.1 ;
		System.out.println("number的值="+number);
		System.out.println("snumber的值="+snumber);
	}
	
	
	public static void main(String[] args) {
		
		Static_Method_Test smtest = new Static_Method_Test();
        //对象调用实例方法
		smtest.test1();
		//类名调用实例方法,错误的调用,类名不能调用实例方法
	//	Static_Method_Test.test1();  //报错
		
	}

}

以上代码输出结果:
number的值=22.222
snumber的值=2.2


二、类名调用类方法

1、即类方法在类被加载到内存时,就分配了相应的入口地址,从而可以直接通过类名调用,也可以被类中创建的任何对象调用;而实例方法则不行,只能由对象进行调用;

2、类方法中只能对类变量进行操作,不能对实例变量进行操作,而实例方法则可以对实例变量和类变量进行操作,是因为在类创建对象之前,实例变量还没有分配内存;

如下代码演示:

public class Static_Method_Test {

	//测试实例方法与类方法:类名调用类方法
	double number = 11.111;       //实例变量
        static double snumber = 1.1 ;  //类变量
    
	static void test1 (){
//	number += 11.111 ;   
//报错:Cannot make a static reference to the non-static field number

	snumber += 1.1 ;
//	System.out.println("number的值="+number);  //报错
	System.out.println("snumber的值="+snumber);
}
	
	public static void main(String[] args) {
		
		Static_Method_Test smtest = new Static_Method_Test();
                //对象调用类方法
		smtest.test1();
		//类名调用类方法
		Static_Method_Test.test1(); 
		
	}
}

以上代码输出结果:

snumber的值=2.2
snumber的值=3.3000000000000003

类方法 test1 被调用了两次,在类方法中不能对实例变量进行操作;

 

你可能感兴趣的:(Java基础知识,Java实例方法与类方法的区别,实例变量与类变量的区别,实例变量与类变量的不同)