浅析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 ...
随机推荐
- Do you want to continue? [Y/n] Abort.
当出现这个后命令终止,无法选择 y这时候 ,在输入命令时候提前加入 -y udo apt install sysv-rc-conf -y
- 题解 [HNOI2008]GT考试
传送门 这题暴力对拍都难搞,差评 一般的题解里思路是考虑一般DP: 令\(dp[i][j]\)为枚举到第i位时匹配到第j位的方案数,令\(g[k][j]\)为将匹配到k位的情况补到匹配到j位的方案数 ...
- SSM自学笔记(二)
3.SpringMVC入门 1.Spring与Web环境集成 1.1 ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplication ...
- vs code 调试angular2
调试步骤: 1.安装nodejs 2.安装vscode 3.vscode安装debugger for chrome插件 4.选择调试->打开调试配置,选择chrome配置,打开lauch.jso ...
- C# 利用反射进行深拷贝
- mybatis学习日志二
一.动态sql语句 if语句 if+where语句 if+set语句 choose(when,otherwise)语句 trim语句 sql片段 foreach语句 总结 bean部分的User类代码 ...
- Linux命令:ps -ef |grep java
一.ps -ef |grep java 查看包含"java"的所有进程 二.涉及命令详解 ps命令将某个进程显示出来(是LINUX下最常用的也是非常强大的进程查看命令) grep命 ...
- java基本数据类型转换字符串
1.基本数据类型转换为字符串 int t1 = 2; String t2 = Integer.toString(t1); 2.字符串转换为基本数据类型 int t3 = Integer.parseIn ...
- Java程序设计学习笔记(二)
--正则表达式 正则表达式 ^ 匹配的开始 $ 匹配的结束 [] 表示匹配任意一个字符 [asdasd] ...
- 用vue的抽象组件来做一个防止img标签url为空或url地址出错的验证
看了网上文章学习了下vue的抽象组件,感觉就跟react的高阶组件一样的使用场景,只是更加面向vue的底层编程 ,网上介绍的抽象组件一般有2种用法,1 用来加防抖和节流 2 用来控制按钮是否允许点击做 ...