廖雪峰Java2面向对象编程-5包和classpath-1静态字段和方法
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静态字段和方法的更多相关文章
- 廖雪峰Java2面向对象编程-5包和classpath-3作用域
1.访问权限 Java的类.接口.字段和方法都可以设置访问权限 访问权限是指在一个类的内部,能否引用另一个类以及访问它的字段和方法 访问权限有public.protected.private和pack ...
- 廖雪峰Java2面向对象编程-5包和classpath-1包package
1.package的意义 如下,存在多个相同类名的文件.当引用Person类,将无法确定引用小红,还是小明的Person类,即同名类的冲突. 小明的Person类:Person 小红的Person类: ...
- 廖雪峰Java2面向对象编程-5包和classpath-4classpath和jar
1.classpath 1.1classpath定义 classpath是一个环境变量 classpath指示JVM如何搜索class classpath设置的搜索路径与操作系统相关 * window ...
- 廖雪峰Java2面向对象编程-3继承和多态-1继承
1.继承 继承是一种代码复用的方式. Student与Person有相同部分的代码. Student可以从Person继承,这样Student获得了Person的所有功能,只需要编写新增的功能即可.通 ...
- 廖雪峰Java2面向对象编程-1面向对象-1面向对象基础
1.对象的概念 面向对象编程:Object-Oriented Programming 对现实世界建立计算机模型的一种编程方法. 现实世界 计算机模型 Java代码 人 类/class class Pe ...
- 廖雪峰Java2面向对象编程-4抽象类和接口-2接口
1.接口的定义 抽象方法本质上是定义接口规范. 在抽象类中定义了一个抽象方法,子类中必须实现这个抽象方法. public abstract class Person{ public abstract ...
- 廖雪峰Java2面向对象编程-4抽象类和接口-1抽象类
每个子类都可以覆写父类的方法 如果父类的方法没有实际意义,能否去掉方法的执行语句?子类会报编译错误 如果去掉父类的方法,就失去了多态的特性 可以把父类的方法声明为抽象方法. 如果一个class定义了方 ...
- 廖雪峰Java2面向对象编程-6Java核心类-6常用工具类
1.Math Math提供了数学计算的静态方法 序号 方法 描述 1 abs() 返回参数的绝对值.Math.abs(-9)//9 2 ceil() 返回大于等于( >= )给定参数的的最小整数 ...
- 廖雪峰Java2面向对象编程-6Java核心类-5枚举类
直接定义常量 public class Weekday { //定义int常量 public static final int SUN = 0; public static final int MON ...
随机推荐
- hdu1540 Tunnel Warfare 线段树/树状数组
During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast a ...
- 线程---插队和礼让执行(join和yield)
插队: 礼让:
- Vue 1组件的使用
在components新建一个vue组件: <template> <div> <h1>{{ msg }}</h1> </div> </ ...
- linux 文件管理操作入门
mkdir -p /root/kali/bp/shell 一路创建文件夹直到生成文件夹shell,中间没有kali文件夹的话也会自动创建生成 tar解压缩 范例一:将整个 /etc 目录下的文件全部 ...
- linux实用操作
静态ip vi /etc/sysconfig/network-scripts/你的网卡名字(使用ifconfig查看,第一个就是)dhcp修改为static,onboot改为yes IPADDR=19 ...
- 开机或者安装系统时提示tsc: Fast TSC calibration failed解决方法
其实这个问题很简单,主要是时间不对的问题. 就拿我遇到这个问题来说.我是在vm虚拟机中安装了xenserver,然后在物理机安装xencenter连接xenserver,然后在安装新的虚拟机时遇到这个 ...
- pghoard 面向云存储的pg 备份&&恢复工具
pghoard 面向云存储的pg 备份&&恢复工具 包含的特性 自动定期basebackup 自动事务日志(WAL / Xlog软件)备份(使用pg_receivexlog, arch ...
- drone 1.0 新功能试用以及说明
drone 1.0 rc 已经发布,新的功能很强大,界面比旧版本更加人性化,和git 的集成也更高了 测试环境准备 试用gogs 做为git 管理工具 docker-compose 文件 versio ...
- Array.asList()
package study.stage2;import java.util.*; /** * Created by Sandy.Liu on 2017/7/19. */public class Asl ...
- Meandering Through the Maze of MFC Message and Command Routing MFC消息路由机制分析
Meandering Through the Maze of MFC Message and Command Routing Paul DiLascia Paul DiLascia is a free ...