1.静态字段

1.1定义:用static修饰的字段称为静态字段

  • 普通字段在每个实例中都有自己的一个独立的空间
  • 静态字段只有1个共享空间,所有实例都共享该字段。
public class Person{
public String name;
public int age;
public static int number = 100;
public Person(String name, int age){
this.name = name;
this.age = age;
}
}
public class Hello{
public static void main(String[] args){
Person ming = new Person("小明", 12);
Person hong = new Person("小红", 18);
}
}

ming和hong都有各自的name和age,但number都指向了Person类的number。即所有实例共享一个静态字段。

1.2静态字段的属性

  • 所有实例共享一个静态字段
  • 不推荐用实例变量访问静态字段
  • 推荐用类名访问静态字段
  • 可以把静态字段理解为描述class本身的字段(非实例字段)

Person.java

public class Person {
public String name;
public int age;
public static int number = 100;
public Person(String name){
this.name = name;
number++;
}
public static int getNumber(){
return number;
}
}

Hello.java

public class Hello {
public static void main(String[] args){
Person ming = new Person("小明");
Person hong = new Person("小红");
/*
所有的实例共享一个静态字段,可以通过实例变量访问静态字段,但不推荐。
Java中实例对象并没有静态字段,实例对象能够访问静态字段只是编译器能够根据类型实例自动转换为类名来访问静态字段。
*/
ming.number = 99;
System.out.println(ming.number);
//推荐用类名访问静态字段
Person.number = 88;
System.out.println(Person.number);
}
}

2.静态方法

2.1定义:用static修饰的方法称为静态方法

静态方法不需要通过实例调用

  • 调用实例方法必须通过实例变量
  • 调用静态方法不需要实例变量
  • 静态方法类似其他编程语言的函数,如python的类的方法,直接调用

2.2限制:

  • 静态方法不能访问this变量
  • 静态方法不能访问实例字段,实例字段都是通过this访问的
  • 静态方法可以访问静态字段

Person.java

public class Person {
public String name;
public int age;
public static int number ;
public Person(String name){
this.name = name;
number++;
}
public static int getNumber(){
return number;
}
}
public class Hello {
public static void main(String[] args){
Person ming = new Person("小明");
System.out.println(Person.getNumber());
Person hong = new Person("小红");
System.out.println(Person.getNumber());
Person hua = new Person("小花");
System.out.println(Person.getNumber());
}
}

静态方法的作用:

静态方法经常用于工具类

Arrays.sort()

Math.random()

静态方法经常用于辅助方法

Java程序入口main()也是静态方法

实例

总结:

静态字段属于所有实例共享的字段,实际上是属于class的字段

调用静态方法不需要实例,因此无法访问this

静态方法可以访问静态字段和其他静态方法

静态方法常用语工具类和辅助方法。

廖雪峰Java2面向对象编程-5包和classpath-1静态字段和方法的更多相关文章

  1. 廖雪峰Java2面向对象编程-5包和classpath-3作用域

    1.访问权限 Java的类.接口.字段和方法都可以设置访问权限 访问权限是指在一个类的内部,能否引用另一个类以及访问它的字段和方法 访问权限有public.protected.private和pack ...

  2. 廖雪峰Java2面向对象编程-5包和classpath-1包package

    1.package的意义 如下,存在多个相同类名的文件.当引用Person类,将无法确定引用小红,还是小明的Person类,即同名类的冲突. 小明的Person类:Person 小红的Person类: ...

  3. 廖雪峰Java2面向对象编程-5包和classpath-4classpath和jar

    1.classpath 1.1classpath定义 classpath是一个环境变量 classpath指示JVM如何搜索class classpath设置的搜索路径与操作系统相关 * window ...

  4. 廖雪峰Java2面向对象编程-3继承和多态-1继承

    1.继承 继承是一种代码复用的方式. Student与Person有相同部分的代码. Student可以从Person继承,这样Student获得了Person的所有功能,只需要编写新增的功能即可.通 ...

  5. 廖雪峰Java2面向对象编程-1面向对象-1面向对象基础

    1.对象的概念 面向对象编程:Object-Oriented Programming 对现实世界建立计算机模型的一种编程方法. 现实世界 计算机模型 Java代码 人 类/class class Pe ...

  6. 廖雪峰Java2面向对象编程-4抽象类和接口-2接口

    1.接口的定义 抽象方法本质上是定义接口规范. 在抽象类中定义了一个抽象方法,子类中必须实现这个抽象方法. public abstract class Person{ public abstract ...

  7. 廖雪峰Java2面向对象编程-4抽象类和接口-1抽象类

    每个子类都可以覆写父类的方法 如果父类的方法没有实际意义,能否去掉方法的执行语句?子类会报编译错误 如果去掉父类的方法,就失去了多态的特性 可以把父类的方法声明为抽象方法. 如果一个class定义了方 ...

  8. 廖雪峰Java2面向对象编程-6Java核心类-6常用工具类

    1.Math Math提供了数学计算的静态方法 序号 方法 描述 1 abs() 返回参数的绝对值.Math.abs(-9)//9 2 ceil() 返回大于等于( >= )给定参数的的最小整数 ...

  9. 廖雪峰Java2面向对象编程-6Java核心类-5枚举类

    直接定义常量 public class Weekday { //定义int常量 public static final int SUN = 0; public static final int MON ...

随机推荐

  1. web服务器和数据库服务器分离的优势

    一般我们服务器都是分开的,网页服务器.数据服务器单独配置. web服务器不掉,那么就可以正常使用,data服务器掉了,那么web还可以坚持一会. 如果是web服务器掉了,那么就上不去了,不过有一些设置 ...

  2. ThinkPHP验证码类的使用

    1.创建一个方法并引入验证码类class ShowAction extends Action{//用户评论验证码public function verify(){import('ORG.Util.Im ...

  3. 针对IE浏览器的CSS样式(兼容性)

    1. IE hacks: "_"  是IE6 专有的hack; "\9" 对IE6-IE10都有效: "\0"对IE8-IE10都有效: & ...

  4. LG2634 [国家集训队]聪聪可可

    题意 题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一般情况下石头剪刀布就好了,可是 ...

  5. MySQL--数据超时相关参数

    =============================================== connect_timeout connect_timeout用在client和server之间建立连接 ...

  6. 普林斯顿数学指南(第二卷) (Timothy Gowers 著)

    第IV部分 数学的各个分支 IV.1 代数数 IV.2 解析数论 IV.3 计算数论 IV.4 代数几何 IV.5 算术几何 IV.6 代数拓扑 IV.7 微分拓扑 IV.8 模空间 IV.9 表示理 ...

  7. 使用dynamic和MEF实现轻量级的AOP组件 ---- 系列文章

      .NET 4 实践 - 使用dynamic 和MEF实现轻量级的AOP组件(1)   .NET 4 实践 - 使用dynamic和MEF实现轻量级的AOP组件 (2) .NET 4 实践 - 使用 ...

  8. Chrome 66 禁止声音自动播放

    声音无法自动播放一直在IOS/Android上面都是一个惯例, 桌面端的 Safari在2017年的11版本中也宣布禁止带有声音的多媒体自动播放, 紧接着2018年4月份Chrome发布的66版本也正 ...

  9. TP5一对一、一对多关联模型的使用

    文章表SQL CREATE TABLE `tp_article` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `title` varc ...

  10. KNN手写实践:Python基于数据集整体计算以及排序

    1. 距离计算,不要通过遍历每个样本来计算和指定样本距离,而是通过对于指定样本进行广播(复制)成为一个shape和全局一致后,再进行整体计算,这里的广播 / 复制采用的是tile函数来实现的: 2. ...