java 静态方法 this_java中的static关键字, this的使用限制

本文详细解析了Java中static关键字的作用,包括静态变量、方法和this关键字的用法。重点讲解了静态与非静态属性的区别,以及this关键字在构造方法中的使用规则。同时介绍了如何避免在构造方法中误用super和this。
摘要由CSDN通过智能技术生成

static关键字的作用可理解为静态属相, 如静态变量, 静态方法, 即直接使用类名来访问, 虽然使用对象调用也能执行, 但不建议这么用;

不使用static修饰的变量或方法都只能使用对象调用

总结: 对象能掉类中一切属相和方法(带不带static都可以), 但是类名调用只能调用带static的属相或方法;   带static的属相和方法即使使用null来调用也可以, 因为其根本不需要对象参与!

(以上的前提是都在同一个类中, 不在同一个类中的没得玩)

静态变量在类加载的时候就初始化了, 不需要创建对象, 内存就开辟好了, 其存储在方法区内存中;

1. 使用static修饰的变量

public classClassTest {public static voidmain(String[] args) {

User obj= newUser();//obj.func(); 使用对象调用static修饰的func, 虽也能执行, 但不建议这么做

User.func();

System.out.println(User.i);//System.out.println(User.x); 此处的x没有使用static修饰, 不能用类名来调用

System.out.println(obj.x); //使用对象调用

}

}classUser{static int i = 10;int x = 10;public static voidfunc() {

System.out.println("run func......");

System.out.println(User.i);//System.out.println(User.x); 此处的x没有使用static修饰, 不能用类名来调用

}

}

2. this关键字代指当前对象, 哪个对象调用就代表哪个对象, 但不可用于带有static修饰的方法中

classQu1{int i = 100;public static voidfun1() {

System.out.println(this.i); // static修饰的方法中, 使用this会报错, 因为改方法属于类方法, 不涉及对象

}

}classQu2{int i = 100;public voidfun1() {

System.out.println(this.i); // this代指调用改方法的对象

}

}

总结: 在使用static修饰的方法, 不涉及对象, 所以其内直接调用不带static的其它方法都不允许;

不使用static修饰的方法, 都是需要对象调用的, 所以其内可直接调用不带static的其它方法;

3. this关键字什么时候不能省略?

public classClassTest {intnum;public static voidmain(String[] args) {

System.out.println("main......");

ClassTest obj= newClassTest();

obj.func(obj.num);

System.out.println(obj.num);

}//public void func(int num) {//num = num+110;//}

public void func(intnum) {this.num = num+110;

}

}

补充: 如果使用中间注释掉的func的话, 在main中输出的obj.num的值就是0, 因为func中修改的只是局部变量num, 不是类变量num; int变量不赋值, 默认值就是0

this用于区分局部变量和对象变量的时候不能省略

4. 构造方法中的this关键字

public classClassTest {public static voidmain(String[] args) {

System.out.println("main......");

Quzq obj1= newQuzq();

Quzq obj2= new Quzq(666);

obj1.printi();

obj2.printi();

}

}classQuzq {private int x = 1;public Quzq(intx) {super();this.x =x;

}publicQuzq() {//super(); // 此处super方法不能有, 否则this的这种用法会报错//this.x = 110;

this(110);

}public voidprinti() {

System.out.println(this.x);

}

}

说明: 在无参实例化时, 其内写死了一个处使化值, 可以直接写死, 但是和上面有参初始化处的代码有冗余, 如何复用上面的有参初始化呢?

两种方式: 方式一是, 在无参初始化中new一个新对象, 用新对象调用有参初始化设定值, 但是这样一来我们调用无参初始化会产生两个对象!

方式二是, 使用this关键字, 即this(参数) 的形式, 此时调用无参初始化本质是执行的有参初始化, 其也只会产生一个对象

注意: this(形参的语法只能出现在构造方法中的第一行!!!!!!)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值