浅析Java中的static关键字
关键点
《Java编程思想》对static方法的描述:“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建对象的前提下,仅仅通过类本身来调用staic方法。这实际上正是static方法的主要用途。”
虽然它只说明了static方法,但可以看出static关键字的主要作用:在没有创建对象的前提下,通过类本身来调用静态方法,访问静态域,获取静态常量;在类加载时执行静态块;导入包中的静态方法和静态常量。
1.静态域(极少使用)
如果将域定义为static,每个类中只有一个这样的域。而每一个对象对于所有的实例域却都有自己的一份拷贝。
class Student{
private static String faculty = "计算机学院";
...
}
如上,如果这个类创建了多个Sutdent实例,所有实例将共享这个faculty;即便没有对象,静态域也存在,它属于类,不属于任何独立的对象。
2.静态常量(常用)
与非静态常量的不同在于,每个类的实例都有一份普通常量,而整个程序中只存在一份静态常量。
public final int Year = 2015;
public static final int Year = 2015; //更节省空间
3.静态方法
静态方法是一种不能向对象实施操作的方法,它没有this参数,不能访问实例域。通过class.method来调用。(也可以像调用实例方法使用object.method来调用,但不推荐)
class Student{
...
public static String getFaculty() {
return faculty;
}
...
}
//Student.getfaculty() 使用class.method调用
在以下情况下使用静态方法:
1)一个方法不需要访问对象状态,其所有参数都是通过显示参数提供
2)一个方法只需要访问类的静态域
限制
1)不可升级,重写
2)固定占用内存,不被释放
4.静态块
特点:类加载时,对象创建之前执行,在整个应用程序的生命周期只执行一次。
public class Test {
public static void main(String[] args){
mytest a = new mytest();
mytest b = new mytest();
}
}
class mytest{
static {
System.out.println("静态块执行");
}
public mytest(){
System.out.println("构造器执行");
}
}
执行结果:
静态块执行
构造器执行
构造器执行
5.静态导入
使用import static xxx来导入静态方法和静态常量
import static java.lang.System.out;
out.println("hello world!"); //可使用out而不用System.out
代码实例:
1 import java.util.Random;
2
3 import static java.lang.System.out; //静态导入
4
5 class StuentTest
6 {
7 public static void main(String[] args) {
8 Student[] test = new Student[3];
9 test[0] = new Student("张三","20151000153","01",3.4);
10 test[1] = new Student("李四","20150000231","02",2.9);
11 test[2] = new Student("王五","20151000462","03",4.2);
12
13 double average = 0;
14 for (Student i:test) {
15 out.println(i.getName() +' '+Student.Year+' '+Student.getFaculty()+' '+Student.getFacilty_id()+' '+ i.getStu_id()+' ' + i.getClass_id()+' ' + i.getGpa());
16 //类名.方法名调用静态方法,获取静态常量
17 average += i.getGpa();
18 }
19 out.println("average_gpa:" + average/3);
20 Student.setFaculty("艺术与传媒学院"); //改变静态常量
21 for(Student i:test){
22 out.println(i.getName()+' '+Student.getFaculty());
23 }
24 }
25 }
26
27 class Student
28 {
29 private String name;
30 public static final int Year = 2015; //静态常量
31 private static String faculty = "计算机学院"; //静态变量
32 private static int facilty_id;
33 private String stu_id;
34 private String class_id;
35 private double gpa;
36
37 //静态块
38 static {
39 Random generator = new Random();
40 facilty_id = generator.nextInt(19);
41 }
42
43 public Student(String name,String stu_id,String class_id,double gpa) {
44 this.name = name;
45 this.stu_id = stu_id;
46 this.class_id = class_id;
47 this.gpa = gpa;
48 }
49
50 public static String getFaculty() {
51 return faculty;
52 }
53
54 public static int getFacilty_id()
55 {
56 return facilty_id;
57 }
58
59 public String getName() {
60 return name;
61 }
62
63 public String getStu_id() {
64 return stu_id;
65 }
66
67 public String getClass_id() {
68 return class_id;
69 }
70
71 public double getGpa(){
72 return gpa;
73 }
74
75 public static void setFaculty(String str){
76 faculty = str;
77 }
78 }
执行结果:
张三 2015 计算机学院 7 20151000153 01 3.4
李四 2015 计算机学院 7 20150000231 02 2.9
王五 2015 计算机学院 7 20151000462 03 4.2
average_gpa:3.5
张三 艺术与传媒学院
李四 艺术与传媒学院
王五 艺术与传媒学院
浅析Java中的static关键字的更多相关文章
- JAVA面试题 浅析Java中的static关键字
面试官Q1:请说说static关键字,你在项目中是怎么使用的? static 关键字可以用来修饰:属性.方法.内部类.代码块: static 修饰的资源属于类级别,是全体对象实例共享的资源: 使用 s ...
- 浅析Java中的final关键字
浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...
- [转载]浅析Java中的final关键字
浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...
- 【转】浅析Java中的final关键字
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. ...
- 浅析Java中的native关键字
浅析Java中的native关键字 native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中.Java语言本身不能对操作系统底层进 ...
- (转)Java中的static关键字解析
转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...
- 关于Java中的static关键字
Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较 ...
- Java中的static关键字解析
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- (转)Java中的static关键字解析
转自http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “sta ...
随机推荐
- 【AI】TorchVision_DataLoad
From: https://liudongdong1.github.io/ All datasets are subclasses of torch.utils.data.Dataset i.e, t ...
- docker 安装部署 mysql(配置文件启动)
获取 mysql 镜像 docker pull mysql:5.6 docker images 创建容器 创建宿主机 redis 容器的数据和配置文件目录 # 创建宿主机 redis 容器的数据和配置 ...
- flutter中将widget转为base64
flutter中可以通过RepaintBoundary widget中的toImage方法将页面中的widget转为base64. 如何使用? 首先要在全局定义一个global key,分配给Repa ...
- 【springboot】validator枚举值校验
转自: https://blog.csdn.net/aiyaya_/article/details/78588200 一.前言 在spring项目中,校验参数功能使用hibernate validat ...
- mfc HackerTools防止程序双开
来自:https://github.com/TonyChen56/HackerTools 1 HANDLE hMutex = CreateMutexA(NULL, FALSE, "GuiSh ...
- 进程CPU、内存过高问题查找
1.定位进程 找出占用CPU最高的10个进程 ps aux | sort -k3nr | head -n 10 查看占用内存最高的10个进程 ps aux | sort -k4nr | head -n ...
- jQuery中的事件(八):on()、off()、bind()、unbind()、one()、hover()、hide()、show()、offset()等
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- roscore启动不完全问题
运行roscore,得到如下日志,且一直卡着无法继续执行 ... logging to /home/xbit/.ros/log/79f2952c-589c-11ea-8213-d0abd5e7d222 ...
- shutdown 命令
# shutdown -h #停止系统服务并关机 -r #停止系统服务后重启 shutdown -h now #立即关机 shutdown -h 10:53 #到10:53关机,如果该时间小于当前时间 ...
- Python之requests模块-cookie
cookie并不陌生,与session一样,能够让http请求前后保持状态.与session不同之处,在于cookie数据仅保存于客户端.requests也提供了相应到方法去处理cookie. 在py ...