Java学习笔记-----this 和 static

this 和 static

知识框架:

this和static
this
this在实例方法中使用
this在构造方法中使用
静态变量
静态代码块
静态方法

this

1.this是java语言中的一个关键字,全部小写,是一个引用保存内存地址指向自身。
2. this可以使用在实例方法中,也可以使用在构造方法中。
3. this出现在实例方法中其实代表的是当前对象。
4. this不能使用在静态方法中。
5. this. 大部分情况下可以省略,但是用来区分局部变量和实例变量的时候不能省略。
6. this() 这种语法只能出现在构造方法的第一行,表示当前构造方法调用本类其他的构造方法,目的是代码复用

this可以看成为一个变量,是一个引用,存储在Java虚拟机堆内存的对象内部。this 这个引用保存了当前对象的内存地址指向自身。

this在实例方法中使用

this 指向“当前对象”,也可以说 this 代表“当前对象”,this 可以使用在实例方法中以及构造方法中,语法格式分别为“this.”和“this(…)”。this 不能出现在带有static 的方法当中。
static 的方法,在调用的时候是不需要创建对象的,直接采用“类名”的方式调用,也就是说static 方法执行的过程中是不需要“当前对象”参与的,所以static 的方法中不能使用this,因为 this 代表的就是“当前对象”
例如:

//定义一个时间类
class Date{
     private int year;//年
     private int month;//月
     private int day;//日
     //构造方法无参
     public Date(){
         //默认时间为1970年1月1日
         this.year = 1970;
         this.month = 1;
         this.day = 1;
}
     //构造方法有参数
     public Date(int year, int month, int day){
         this.year = year;
         this.month = month;
         this.day = day;
} 
 //获取当前对象的年份
 public int getYear(){
        return this.year;
        //也可以这样写
        //return year;
 }
 //其他的月份和日期也是这样类似的写法
}

this在构造方法中使用

this 还有另外一种用法,使用在构造方法第一行(只能出现在第一行,这是规定),通过当前构造方法调用本类当中其它的构造方法,其目的是为了代码复用。调用时的语法格式是:this(实际参数列表),请看以下代码:

public class Date {
     private int year;//年
     private int month;//月
     private int day;//日
//默认创建的日期为 1970 年 1 月 1 日
/*
//构造方法无参
  public Date(){ 
     this.year = 1970;
     this.month = 1;
     this.day = 1;
}
*/
//构造方法无参也可以这样写
public Date(){
        //默认时间为1970年1月1日
        this(1970,1,1);
}
 //构造方法有参数
public Date(int year,int month,int day){ 
      this.year = year;
      this.month = month; 
      this.day = day;
}
//获取年份
public int getYear() { 
     return year;
}
//修改年份
public void setYear(int year) {
     this.year = year;
}
//获取月份
public int getMonth() { 
     return month;
}
//修改月份
public void setMonth(int month) { 
     this.month = month;
}
//获取天数
public int getDay() {
     return day;
}
//修改天数
public void setDay(int day) { 
     this.day = day;
}
}

public class Date {
    public static void main(String[] args) { 
          Date d1 = new Date();
          System.out.println(d1.getYear() + " 年" + d1.getMonth() + " 月" + d1.getDay() + "日");
          Date d2 = new Date(2008 , 8, 8);
          System.out.println(d2.getYear() + " 年" + d2.getMonth() + " 月" + d2.getDay() + "日");
}
}

运行截图:
结果

static

static是什么:

  1. static 是java 语言中的关键字,表示“静态的”。
  2. 所有的static关键字修饰的都是类相关的,类级别的。
  3. 在 java 语言中凡是用static 修饰的都是类相关的,不需要创建对象,直接通过“类名”即可访问,即使使用“引用”去访问,在运行的时候也和堆内存当中的对象无关。
  4. static修饰的变量:静态变量
  5. static修饰的方法:静态方法

static可以用来修饰变量、方法、代码块等, 修饰的变量叫做静态变量,修饰的方法叫做静态方法,修饰的代码块叫做静态代码块。

静态变量

变量的分类
变量根据声明的位置进行划分:
在方法体当中声明的变量叫做:局部变量。
在方法体外声明的变量叫做:成员变量。
成员变量又可以为分:
实例变量
静态变量
java 中的变量包括:局部变量和成员变量,在方法体中声明的变量为局部变量,只能在方法体中访问,方法结束之后局部变量内存就释放了,在内存方面局部变量存储在栈当中。在类体中定义的变量为成员变量,而成员变量又包括实例变量和静态变量,当成员变量声明时使用了 static 关键字,那么这种变量称为静态变量,没有使用 static 关键字称为实例变量。实例变量存储在堆内存当中,静态变量存储在方法区当中。实例变量在构造方法执行过程中初始化,静态变量在类加载时初始化。
例如:

//定义人类
public class People {
      //身份证号
      int idCard;
      //性别(默认所有男人的性别都是“男”)
      //true 表示男,false 表示女
      static boolean sex = true;
      public Man(int idCard){
          this.idCard = idCard;
  }
}
//测试类
public class PeopleTest {
    public static void main(String[] args) { 
        Man jack = new Man(100);
        System.out.println(jack.idCard + "," +(Man.sex ? "男" : "女"));
        Man  paul = new Man(101);
        System.out.println(paul.idCard + "," +(Man.sex ? "男" : "女")); 
        Man book = new Man(102);
        System.out.println(book.idCard + "," +(Man.sex ? "男" : "女"));
}
}

运行结果:
结果
通过以上代码测试得知,静态变量和静态方法比较正式的方式是直接采用“类名”访问,虽然静态相关的成员也能使用“引用” 去访问,但这种方式并不被主张。
什么时候使用静态变量:当一个类的所有对象的某个“属性值”不会随着对象的改变而变化的时候,应将该属性定义为静态属性(或者说把这个变量定义为静态变量),静态变量在类加载的时候初始化,存储在方法区当中,不需要创建对象,直接通过“类名”来访问。

每个对象不同的是实例变量。
每个对象相同的是静态变量。

静态代码块

静态代码块的语法格式:
类{
//静态代码块static{
java 语句;
}

}
静态代码块在类加载时执行,并且只执行一次。一个类当中可以编写多个静态代码块(大部分情况下只编写个),并且静态代码块遵循自上而下的顺序依次执行,所以有的时候放在类体当中的代码是有执行顺序的(自上而下的顺序),另外静态代码块当中的代码在 main 方法执行之前执行,这是因为静态代码块在类加载时执行。

静态方法

“工具类”当中的方法一般定义为静态方法,因为工具类就是为了方便大家的使用,将方法定义为静态方法,比较方便调用,不需要创建对象,直接使用类名就可以访问。
工具类就是为了方便编程而开发的一些类。

实例代码块:
实例代码块在类加载是没有执行的,只要是构造方法执行,必然在构造方法执行之前,自动执行“实例语句块”中的代码。
实例语句的语法:
{
java语句;
java语句;

}

判断下面代码的执行顺序:
截图
执行顺序为: A X Y C B Z

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值