类的初始化顺序;字段和属性的定义
首先必须知道静态成员属于类,非静态成员属于对象
package static关键字;
/*
* 类的加载顺序:静态成员默认初始化(顺序)-静态成员显示初始化(顺序)-main方法。 如果有父类先执行父类的初始化(执行顺序一样)
* 注意: 什么时候执行非静态成员呢?
* 只有实例化类之后才会执行非静态成员的,因为非静态成员是属于实例对象的,而静态成员是属于类的。
* 当创建了一个对象的时候,就需要对其进行初始化-顺序:
* 非静态成员-构造方法
*
*/
public class StaticTest {
public static int k = 0;//1
public static StaticTest t1 = new StaticTest("t1");//2-4
/*这里创建了一个类对象,那么就必须对其进行初始化:
* 按照顺序来:j-构造代码块-构造方法
* (这里必须知道一件事对于i和n只进行了默认初始化所以它的值是0(int型))
*/
public static StaticTest t2 = new StaticTest("t2");//5-7
/*
* 这里同上
*/
public static int i = print("i");//8
public static int n = 99;
public int j = print("j");
{
print("构造快");
}
static{
print("静态块");
}
public StaticTest(String str) {
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
++n;
++i;
}
public static int print(String str) {
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
++i;
return ++n;
}
public static void main(String[] args) {
StaticTest t = new StaticTest("init");//9-11
System.out.println("i="+StaticTest.i+",k="+StaticTest.k+",n="+StaticTest.n+",j="+t.j);//12
}
}
以下转载自于--------------- 作者:chunlynn 来源:CSDN 原文:
https://blog.csdn.net/chenchunlin526/article/details/71424844?utm_source=copy
字段和属性的定义
字段(field):
通常叫做“类成员”,或 "类成员变量”,有时也叫“域”,理解为“数据成员”,用来承载数据的。
public class A{
private int b;
}
从上面的例子我们可以说类A有一个成员变量b或者说类A中有一个字段b。字段一般是用来承载数据的,为了安全我们一般将其设置为私有的。既然是私有的那么我们该如何访问这个字段呢?-那就必须通过属性方法来访问!
属性
就是字面上的意思(想不出词!)
属性只局限于类中方法的声明,并不与类中其他成员相关,属于JavaBean的范畴。例如:
void setA(String s){}
String getA(){}
当一个类中拥有这样一对方法时,我们可以说,这个类中拥有一个可读写的a属性(注意是小写a)。如果去掉了set的方法,则是可读属性,反之亦然。
public class User {
private String id; //私有字段
private String name; //私有字段
private String identifier = "440282199008098076"; //私有字段
public String getId() {
//id的可读属性
return id;
}
public void setId(String id) {
//id的可写属性
this.id = id;
}
public String getName() {
//name的可读属性
return name;
}
public void setName(String name) {
//name的可写属性
this.name = name;
}
public String getIdentifier() {
//identifier只有一个get方法,所以它是只读属性
return identifier;
}
public final static Integer SHOW_STATUS_YES = 1; //公共字段
public final static Integer SHOW_STATUS_No = 0; //公共字段
}
当我操作这个类时,比如调用getName()方法时,我们要说是获得name属性,调用setName(String name)方法时要说设置name属性,因为对我们来说name字段是私有的,我们操作该Person类时根本看不到有这个name字段 。
一个类主要包括字段、属性和方法。属性在此时指的就是get/set访问器。
同时我们可以看到,这个类有3个属性,5个字段。
SHOW_STATUS_YES 为公用字段,一般修饰为final static类型,可以通过User类直接访问该字段。
getIdentifier为只读属性,只能读取私有的identifier字段,这样就起到了保护数据的安全性的作用。
id和name为私有字段,且有两个操作他们的public属性。可以通过getId()、setId(String id)、getName()、setName(String name)来读取和设置他们的值。
更形象的说就是:属性是对字段的封装,供外部访问。
通常属性将相应的私有字段通过封装成公共属性,以便于外界访问和修改。当然你在封装成属性时,也可以设置该属性为只读,可读写等等权限。