如何理解java中的类变量、成员变量、实例变量、类属性、实例属性、field


package com.tarena.outman.entity;
public class User {
	public static final String SKIN_COLOUR = "yellow";
	public static String nationality = "china";
	private String name;
	private int age;
	private String gender;
	private IDCard card;
	private String[] interest;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public IDCard getCard() {
		return card;
	}
	public void setCard(IDCard card) {
		this.card = card;
	}
	public String[] getInterest() {
		return interest;
	}
	public void setInterest(String[] interest) {
		this.interest = interest;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
}

SKIN_COLOUR
是常量,因为值不变且仅有一份,所有实例共享,也叫成员变量,也叫类变量,也叫类属性,也叫field
更正:不能叫类属性,因为没有set/get方法

nationality
是成员变量,也叫类变量,也叫类属性,也叫field
更正:不能叫类属性,因为没有set/get方法

name
叫成员变量,也叫类变量,也叫实例变量,也叫field,但是不能叫类属性,也不能叫实例属性,如果set/get方法是这样的格式setName()/getName(),那么去掉set/get后的名称就叫实例属性
更正:不能叫类变量,因为没有static修饰,也叫类属性,也叫实例属性,因为有set/get方法

age
同name一样

gender
同name一样

card
同name一样

interest
同name一样


总结

1、类的成员变量就是类属性,这是错误的;
没有set/get方法就不是类属性
2、类属性一定是类的成员变量,这是错误的;
类属性是根据set/get方法得来的,所以不一定是类的成员变量
3、类属性一定是类变量,这是错误的;
这里的类变量是指static修饰的成员变量,类属性即实例属性,肯定没有static修饰,所以不是类变量
4、类变量就是类属性,这是错误的,非static修饰的变量也是类变量,但不叫类属性;

5、类属性就是实例属性,按理是正确的;
6、实例属性就是类属性,按理是正确的;
7、实例属性就是类的成员变量,这是错误的,因为实例属性是根据set/get方法得来的,未必就是成员变量;
8、实例属性就是类变量或者实例变量,这是错误的,因为实例属性是根据setget方法得来的,未必就是实例的变量,而类变量是有static修饰,所以更不可能是类变量了
9、类的属性的定义规则是:set/get方法名,去掉set/get后,将剩余部分首字母小写得到的字符串就是这个类的属性,也叫实例属性;
10、field翻译成中文就是字段或者域的意思,java里不论方法内外的变量或者方法的参数都可以叫field。

争议

1、static修饰的就叫类变量,类属性
2、非static修饰的就叫成员变量,实例变量,实例属性
3、有人说static修饰的变量才叫field,又有人说static修饰的变量才叫field,还有人说方法内声明的变量不能叫field,参数也不能叫field

发布了32 篇原创文章 · 获赞 4 · 访问量 537

猜你喜欢

转载自blog.csdn.net/liaowenxiong/article/details/104988621