类的初始化顺序;字段和属性的定义

类的初始化顺序;字段和属性的定义

首先必须知道静态成员属于类,非静态成员属于对象

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)来读取和设置他们的值。

更形象的说就是:属性是对字段的封装,供外部访问。

通常属性将相应的私有字段通过封装成公共属性,以便于外界访问和修改。当然你在封装成属性时,也可以设置该属性为只读,可读写等等权限。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值