Java基础知识回顾之static修饰属性

相关关键字的说明:
this关键字
final关键字
static关键字修饰属性
static关键字修饰方法
static关键字应用与总结

static 关键字,我们在开发用的还是比较多的。在《Java编程思想》有下面一段话

static 方法就是没有 this 的方法。在 static 方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用 static 方法。这实际上正是 static 方法的主要用途。

static 的用法比较广泛:静态变量、静态成员、静态函数等。我们在使用单列模式的时候,就会用到它。并且 static 数据成员存储在静态存储区,只存储一次,可以节省内存。

static 声明属性

static 修饰成员变量

当我们需要在一个类(class)中定义一个属性为公共的属性,就好比说我们需要这个属性是所有类都是共有的,并且这个属性的值是同一个。

Test.java

class Book{
	
	// 设置一个默认的值
	static String pub = "清华大学出版社";
	
	// 用来和 static 作为对比
	String description = "描述";
	
	// Book 类正常的属性
	private String title;
	private double price;
	
	// Book 的构造类
	public Book(String title, double price) {
		this.title = title;
		this.price = price;
	}
	
	// 获取 Book 的信息
	public void getInfo(){
		System.out.println("图书名称:"+ this.title + ",价格为:"+ this.price + ",出版社为:"+ this.pub + ",描述 "+ this.description);
	}
}

public class Test {
	public static void main(String[] args) {
		// 实例化三个Book类
		Book book1 = new Book("Android开发实战", 69.8);
		Book book2 = new Book("Java EE开发实战", 49.8);
		Book book3 = new Book("Java 开发教程", 79.8);
		
		// 在没有设置 pub 属性的情况下输出
		book1.getInfo();
		book2.getInfo();
		book3.getInfo();
		
		System.out.println("————————————————————无敌分割线————————————————————");
		
		// 我们给 book1 设置一个 pub 属性
		book1.pub = "中信出版社";
		book1.description = "这本书很牛逼,看了你就知道";
		
		book1.getInfo();
		book2.getInfo();
		book3.getInfo();
	}
}

控制台输出

图书名称:Android开发实战,价格为:69.8,出版社为:清华大学出版社,描述 描述
图书名称:Java EE开发实战,价格为:49.8,出版社为:清华大学出版社,描述 描述
图书名称:Java 开发教程,价格为:79.8,出版社为:清华大学出版社,描述 描述
————————————————————无敌分割线————————————————————
图书名称:Android开发实战,价格为:69.8,出版社为:中信出版社,描述 这本书很牛逼,看了你就知道
图书名称:Java EE开发实战,价格为:49.8,出版社为:中信出版社,描述 描述
图书名称:Java 开发教程,价格为:79.8,出版社为:中信出版社,描述 描述

从控制台输出的结果,可以看到:

  • 如果给 属性 赋默认值,在上面的例子中是(description 和 pub),输出的结果为都是默认的。
  • 当我们修改了类中 static 关键字声明的属性,那么只要修改了一次,那么其他所有的对象的这个属性都配修改了。

通过类调用 static 声明的属性

但是基于上面的代码,我们发现如果是其中的一个类对象就改变了所有的对象的属性,这样子操作是不是感觉不是特别好?然后在Java中,如果是使用 static 声明的属性值,是可以直接通过类调用的。

public class Test {

	public static void main(String[] args) {
		// 实例化三个Book类
		Book book1 = new Book("Android开发实战", 69.8);
		Book book2 = new Book("Java EE开发实战", 49.8);
		Book book3 = new Book("Java 开发教程", 79.8);
		
		// 在没有设置 pub 属性的情况下输出
		book1.getInfo();
		book2.getInfo();
		book3.getInfo();
		
		System.out.println("————————————————————无敌分割线————————————————————");
		
		// 我们使用 Book 类直接调用pub
		Book.pub = "中信出版社";
		
		book1.description = "这本书很牛逼,看了你就知道";
		
		book1.getInfo();
		book2.getInfo();
		book3.getInfo();
	}
}

没有实例化类时,调用 static 属性

Test.java

class Book{
	
	// 设置一个默认的值
	static String pub = "清华大学出版社";
	
	// 用来和 static 作为对比
	String description = "描述";
	
	// Book 类正常的属性
	private String title;
	private double price;
	
	// Book 的构造类
	public Book(String title, double price) {
		this.title = title;
		this.price = price;
	}
	
	// 获取 Book 的信息
	public void getInfo(){
		System.out.println("图书名称:"+ this.title + ",价格为:"+ this.price + ",出版社为:"+ this.pub + ",描述 "+ this.description);
	}
}

public class Test {

	public static void main(String[] args) {
		// 在没有实例化对象时,就调用
		System.out.println(Book.pub);
		
		// 没事实例化对象的时候,去给static属性赋值上默认值
		Book.pub = "北京大学出版社";
		System.out.println(Book.pub);
		
		// 新建一个类,输入 pub 属性
		Book book = new Book("Java", 88);
		book.getInfo();
	}
}

控制台输出

清华大学出版社
北京大学出版社
图书名称:Java,价格为:88.0,出版社为:北京大学出版社,描述 描述

由此,我们看出,在没有实例化对象的时候,就可以直接通过类去掉用 static属性,并且还可以修改 static 的属性。static 属性声明虽然是在类的结构中,但是并不受到对象的控制,是独立存在的。

static 属性与非 static 属性的区别

static 声明的属性和普通属性(非 static 属性)最大的区别在于保存的内存区域不同。static 所修饰的在静态数据区。而不是在堆和栈。

static 属性与非 static 属性还有一个最大的区别,就是在于所有非 static 属性必须产生实例化之后才可以访问,但是static 属性不受实例化对象的控制。也就是说,在没有产生实例化对象的情况下,依然可以使用 static 对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值