JavaSE--this和static

一、static关键字

1、static

  • static翻译为“静态的”
  • 所有static关键字修饰的都是类相关的,类级别的
  • 所有static修饰的,都通过“类名.”的方式访问
  • static修饰的变量:静态变量
  • static修饰的方法:静态方法

成员变量分为:实例变量、静态变量

class VarTest{
// 以下实例的,都是对象相关的,访问时采用“引用.”的方式访问,需要先new对象
// 必须先有对象,才能访问,可能会出现空指针异常
// 成员变量
int i;
// 实例方法
public void m2(){
}
// 以下静态的,都是类相关的,访问时次啊用“类名.”的方式访问,不需要new对象
// 不需要对象参与,没有空指针异常
// 静态变量
static int k;
// 静态方法
// 注意::也可以使用“引用.”来访问,不建议用(因为其他程序员看见会困惑)
public static void m1(){
}
}

2、什么时候使用static关键字

// 定义一个类:中国人
class Chinese{
// 身份证号
String idCard;// 一个对象一个身份证号,所以应该是实例变量
// 姓名
String name;// 一个对象一个姓名
// 国籍
// 对于中国人这个类来说 国籍都是“中国”,不会随着对象的改变而改变
// 显然国籍不是对象级别特征
// 国籍属于整个类的特征
static String country = "中国";// 注意::静态变量在类加载是初始化,不需要new对象,静态变量的空间就开出来了
// 注意::静态变量在方法区
// 空引用时静态不会为空指针
public Chinese(){
}
}

3、关于方法来说:什么是定义为实例方法、什么时候定义为静态方法

  当这个方法体当中,直接访问了实例变量,这个方法一定是实例方法

  大部分情况下,如果是工具类的话,工具类中的方法一般都是静态

4、静态代码块

  1)使用static关键字可以定义:

    静态代码块

  2)静态代码块语法

static{
java语句;
java语句;
}

  3)静态代码块什么时候执行

  类加载的时候执行,并且只执行一次

  注意:静态代码块在类加载时执行,并且在main方法之前执行

  4)静态代码块作用

  •   不是很常用(不是每个类当中都用)
  •   静态代码块这种语法机制实际上是sun公司给java 程序员的一个特殊时刻,这个实际叫做类加载时机
    •   具体例子:比如想要记录一下类加载的日志信息(在哪年哪月哪分哪秒哪个类加载到了jvm中)

5、实例语句块

  •   实例块在类加载的时候不会执行
  •   实例块在构造方法之前执行,只要构造方法执行,实例块就会先执行
  •   这叫做对象构建时机

 

public class InstanceCode{
public static void main(String[] args){
System.out.println("main begin");
new InstanceCode();
}
// 实例语句块
{
System.out.println("实例语句块执行");
}
public InstanceCode(){
System.out.println("无参构造");
}
public InstanceCode(String name){
System.out.println("有参构造");
}
}

 

二、this关键字

1、this

  •  this是一个变量,是一个引用。this保存当前对象的内存地址,指向自身
  •  一个对象一个this。严格来说,this代表的就是“当前对象”,this存储在堆内存当中对象的内部。
  •   this只能使用在实例方法中,谁调用这个实例方法this就是谁
  •   this大部分情况下是可以省略的
  •   this什么时候不能省略
    • 在实例方法中或构造方法中,为了区分局部变量和实例变量
class Customer{
private String name;
public Customer(){
}
/*
形式参数s没有可读性
public Customer(String s){
name = s;
}
*/
public Customer(String name){
this.name = name;
}
public void setName(String name){
this.name = name;
}
public void shopping(){
// this就是当前对象
System.out.println(this.name + "shopping");
// this可以省略,省略的话还是默认访问“当前对象”的name
// System.out.println(name + "shopping");
}
}

 2、this不仅可以使用在实例方法中,也可以使用在构造方法中

  通过当前的构造方法去调用同一个类中的另一个构造方法,使用新语法格式:this(实际参数);

  注意::this();调用只能出现构造方法的第一行

/*
定义日期类,可以表示年月日
无参构造:调用默认创建日期1970年1月1日
有参构造:
*/
class Date{
private int year;
private int month;
private int day;
public Date(){
// 调用无参构造初始化日期为固定值
// this.year = 1970;
// this.month = 1;
// this.day = 1;
this(1970,1,1);// 构造本类的另一个构造方法
}
public Date(int year,int month,int day){
this.year = year;
this.month = month;
this.day = day;
}
public void setYear(int year){
this.year = year;
}
public int getYear(){
return year;
}
public void setMonth(int Month){
this.month = month;
}
public int getMonth(){
return month;
}
public void setDay(int day){
this.day = day;
}
public int getDay(){
return day;
}
}

 

posted @   洛小依ovo  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示