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 对象。

Java基础知识整理之static修饰属性的更多相关文章

  1. java基础知识整理:

    一, Java中的继承: 1. final关键字(最终的,不可修改的不可变化的,可以修饰类,方法,变量等): 如果final修饰类的话,这个类不可以被继承: 如果修饰方法的话,这个方法不可以被子类覆盖 ...

  2. java基础知识整理

    java基础入门知识(转载请注明出处.) 1.JVM.JRE和JDK的区别. (1)JVM(Java Virtual Machine):java虚拟机,用于保证java跨平台的特性,java语言是跨平 ...

  3. Java基础知识回顾之二 ----- 修饰符和String

    前言 在上一篇中,回顾了Java的基本数据类型 ,这篇就来回顾下Java中的一些修饰符以及String. 修饰符介绍 Java修饰符主要分为两类: 访问修饰符 非访问修饰符 其中访问修饰符主要包括 p ...

  4. Java 基础知识整理 (待整理)

    JVM之类加载器(ClassLoader)基本介绍 类加载器用于将class文件加载到JVM中去执行.下面介绍类加载器涉及到的基本概念和加载基本过程. 一.Java虚拟机与程序的生命周期 在运行Jav ...

  5. php面向对象基础知识整理之类中的属性和方法的使用

    <?php /** * class Index * 类包含什么 * 1.创建类 * 2.类的属性和类中方法 * 3.类中访问修饰符 * 4.类的封装.继承.多态 */ // 创建类,创建的类名是 ...

  6. Java基础知识整理(一)

    Java开发环境JDK(Java编辑器.Java运行工具(JRE作用).Java文档生成工具.Java打包工具) 1.Java是严格区分大小写的.2.Java程序中一句连续的字符串不能分开在两行书写, ...

  7. java基础知识-笔记整理

    1.查看已安装jdk文件路径 CMD输入java -verbose.   2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...

  8. Java基础知识➣环境搭建与类型整理(一)

    概述 公司业务需要,产品既要有.NET又需要Java,没得选择,只能业余时间学习Java,整体觉得Java也.NET还是很相似的,只是语法有差别,差别也不是很大,这就将学习Java的基础知识整理下,以 ...

  9. 大话java基础知识一之为什么java的主函数入口必须是public static void

    为什么java的主函数入口必须是public static void main (String[] args); 很多写javaEE好几年的程序员经常会记得java的主函数就是这么写的,但实际上为什么 ...

随机推荐

  1. java 几个线程池的理解

    http://www.cnblogs.com/dolphin0520/p/3932921.html 这个文章写的很好

  2. MAC - 命令行中用sublime打开指定文件,使用ln命令建立软链接

    眼下sublime是mac下最好的文本编辑软件.常常要使用它打开一些文件,比如html,js,txt,json等文件,可是sublime2默认不支持在命令行下调用.经过研究发现能够用建立软连接的方式调 ...

  3. 115. distinct subsequence leetcode python

    Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...

  4. 如何把VBS转换为EXE文件

    如下所示,我想要做一个把360网速测试剥离开来的绿色版,有一个TestSpeed.bat命令,双击之后去执行了360AppLoader.exe,并且会调用netmon文件夹的NetSpeed.dll文 ...

  5. java调试工具jdb

    Finds and fixes bugs in Java platform programs. Synopsis jdb [options] [classname] [arguments] optio ...

  6. iOS的URLScheme

    一直都有接触要设置app的url scheme,从最早的facebook開始. 当时的理解是SSO用的,当授权成功之后,facebook app或者safari能够利用给定的url scheme来回调 ...

  7. UDP通信接收端,接收二维数组,内容为0与1

    1: using System; 2: using System.Net; 3: using System.Net.Sockets; 4: using System.Text; 5:   6:   7 ...

  8. 监听iOS检测屏幕旋转状态,不需开启屏幕旋转

    -(void)rotation_icon:(float)n { UIButton *history_btn= [self.view viewWithTag:<#(NSInteger)#>] ...

  9. Bootstrap学习速查表(三) 表单

    表单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文本域和按钮等. 一.基础表单 1.初始化:对于基础表单,Bootstrap并未对其做太多的定制性效果设计,仅仅对表单内的fiel ...

  10. maven新建项目报错

    创建了一个maven项目,报错 Errors occurred during the build. Errors running builder 'Maven Project Builder' on ...