20150902 Java学习笔记-构造方法,关键字,封装性

1. 构造方法

构造方法的作用:在对象实例化的时候为类之中的属性进行初始化操作.
类之中编写构造方法后的结构要进行一些说明: 类之中会存在属性,构造方法,普通方法,所以一定要先写属性,随后写构造方法,最后写普通方法. 还有如果定义了多个构造方法,请按照参数的个数顺序进行排列

2.this关键字

1.程序本身具备就近取用原则, 所谓的近,是以”{}”为范围,为了明确的分辨出是属性还是参数,所以在进行属性访问的时候都要加上this,即”this.属性”的方式进行访问,结论:只要访问类之中的属性,前面永远都要加上this关键字
2.使用this还可以调用类中的方法,而对于方法有两类:
第一类:本类的普通方法,this.方法();
第二类:本类的构造方法,this();
一般而言,如果一个类中有多个构造方法的时候就可以利用this()的形式进行构造方法间的调用.但是在用this调用其他构造方法时有如下 要求:构造的调用必须放在构造方法的首行. 构造方法是在对象实例化的时候只调用一次,而对象实例化之后才可以重复调用类中的方法.同时在利用this调用构造方法的时候请保留有一个出口.至少要保留一个不使用this调用其他构造的作用.
3.this里面有个最麻烦的概念就是表示当前对象.

3.static关键字

  1. static定义属性

对于公共属性,最好用static定义,属性成了全局属性,所有对象所有,面对static属性可以发现由于其可以利用类名称直接调用,所以在很多书上也会将其称为类属性.对于类属性有一个最大的特征,可以在一个类没有实例化产生对象的时候,直接进行操作. 所以static定义的属性不受对象的控制,不管是否有对象,都不影响其使用,所以对于我们static属性而言,虽然定义在类之中,但是却独立于类存在这里写图片描述

2.static定义方法

对于程序而言,属性一定要用private封装,不管static属性,还是非static属性
static定义的方法同样可以用类名调用. 在一类之中发现存在static方法,也存在有非static方法,那么这两者之间的调用是存在限制的:

  • 使用static定义的方法只能够调用static属性或static方法
  • 使用非static定义的方法可以调用static属性或static方法
    这是语法上的限制,那么除了这些语法上的限制之外,我们来进一步分析,为什么会存在这样的限制呢?
    所有的普通属性是在类对象实例化的时候才进行内存空间的分配,而所有的普通方法需要在类实例化对象产生之后才可以进行调用. static定义的属性或方法可以在类没有实例化对象的时候进行调用 .调用static方法的时候有可能还没产生实例化对象呢, 既然没产生实例化对象,我们就不能 调用属性,不能调用非static方法 ,所以进一步想既然有可能在调用static方法的时候, 没有实例化对象产生, 那么我们可能存在this这个当前对象吗? 所以Java语法限制了以上两条

4.代码块

  • 所谓的普通代码块指的就是定义在方法之中,利用”{}”声明的部分.如果将代码块定义在类之中,那么就形成了构造块的概念
  • 构造块优先于方法执行
    3.如果在代码块上加上了static关键字,那么就表示是一个静态块,而静态块的使用要分两种情况
  • 情况一:定义在非主类之中
  • 情况二:定义在主类之中
    静态块优先于构造块执行,并且不管你有多少个实例化对象,静态块只调用一次.一般而言,静态块往往是为static属性初始化的. 静态块的代码优先于主方法执行

5.案例实现封装

这里写图片描述

package com.buaa.day3;

class emps{//雇员类
    //所有属性必须使用private封装
    private int empno ;//雇员编号
    private double sal;//雇员薪资
    private double comm ;//佣
    private String ename ;//雇员姓名
    private String job ;//基本工资


    public int getEmpno() {return empno;}
    public String getEname() {return ename;}
    public String getJob() {return job;}
    public double getSal() {return sal;}
    public double getComm() {return comm;}
    public void setEmpno(int empno) {this.empno= empno;}
    public void setEname(String ename) {this.ename=ename;}
    public void setSal(double sal) { this.sal=sal;}
    public void setJob(String job){this.job=job;}
    public void setComm(double comm){this.comm =comm;}

    public emps(){}
    public emps( int empno,double sal,double comm ,String ename ,String job){
        this.empno = empno;//雇员编号
        this.sal = sal;//雇员薪资
        this.comm = comm;//佣
        this.ename = ename;//雇员姓名
        this.job = job;//基本工资

    }
    public String getIfo(){
        return "雇员编号:"+this.empno+
               ",姓名:"+this.ename+
               ",职位:"+this.job+
               ",工资:"+this.sal+
               ",佣金:"+this.comm;
    }
}
public class EMP {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        emps voEmps = new emps(12,800.0,0.0,"li","clerk");
        System.out.println(voEmps.getIfo());

//以上代码之中发现你并没有调用setter getter 方法,那么还有必要编写吗?
//setter除了设置内容的功能之外,在开发中还有取得的操作,而getter可以取得单个数据,不管是否使用,永远必须提供。
        voEmps.setJob("manager");
        System.out.println(voEmps.getIfo());
        System.out.println(voEmps.getEname());
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值