this和static关键字

本文深入探讨Java中this和static关键字的使用及意义。详细解释了this如何指向对象自身,以及static如何与类绑定,影响对象共享。通过具体代码示例展示了关键字的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.this关键字总是指向对象本身

public class Book {
	String name;
	String author;
	String press;
	double price;

	public Book(String name, String author, String press, double price) {
		this.name = name;
		this.author = author;
		this.press = press;
		this.price = price;
	}

	@Override
	public String toString() {
		return " 书名=" + name + "\n 作者=" + author + "\n 出版社=" + press + "\n 价格="
				+ price + "";
	}

}
public class BookTest {
	public static void main(String[] args) {
		Book[] books = new Book[2];
		books[0] = new Book("鹿鼎记", "金庸", "人民文学出版社", 120.0);
		books[1] = new Book("绝代双骄", "古龙", "中国长安出版社", 55.5);
		for (Book b : books) {
			System.out.println(b.toString());
			System.out.println("==================================");
		}
	}
}

在这里创建了一个一个Book类,在BookTest里面进行了测试,在调用toString的时候是如何辨别是哪一个对象调用了此方法呢。我们每一次使用对象调用方法的时候会多加一个参数进去,那就是这个对象本身,也就是“调用方法的那个对象”,在方法内部也就是this,指代了当前对象的地址。

 

二.static关键字属于类

static修饰的属性,代码块和方法总是依赖于类,类只加载一次,因此static修饰过后也伴随类只加载一次。但这并不表示对象无法调用这些东西,而是说经过static修饰过后总是由这个类创建的对象所共享。在类里面,static的在类加载的同时初始化的,因此,非静态无法使用静态变量。因为静态是属于类的,所以在静态方法中无法使用this和super等关键字。

 

public class testStaticCode {
	public static void main(String[] args) {
		System.out.println(D.i);
		System.out.println(new D().i);
	}
}

class D {

	static {
		i = 2;
		System.out.println("D : 静态代码块i==2");
	}
	static int i = 1;
	static {
		i = 3;
		System.out.println("D : 静态代码块i==3");
	}
}
输出结果:
D : 静态代码块i==2
D : 静态代码块i==3
3
3

在这里先输出了D.i所以加载了类,类的加载只有一次,所以两个静态代码块在类加载的同时各自只输出了一次,所以先输出了两个静态代码块,在D类里面i的定义在静态代码块后面,静态代码块里面先行赋值,是不会报错的,在这里就要看一下对象的初始化顺序了。《Thinking in Java》第八章:构造器内部的多态方法的行为,对象初始化的顺序

(欢迎指正批评!!!)

 

参考书籍:《Thinking in Java》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值