浅析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 ...
随机推荐
- vivo商城计价中心 - 从容应对复杂场景价格计算
一.背景 随着vivo商城的业务架构不断升级,整个商城较为复杂多变的营销玩法被拆分到独立的促销系统中. 拆分后的促销系统初期只是负责了营销活动玩法的维护,促销中最为重要的计价业务仍然遗留在商城主站业务 ...
- Window如何查看cpu核数,更改CPU开启的核数?
转载地址:http://www.win7zhijia.cn/win10jc/win10_8627.html
- PHP随手记2--获取随机n位不重复字符
定义一个函数返回26英文字母中n位不重复随机字符 基本思路是利用内置函数生成随机数,取出该位置字母之后将其删除,再进行下一次随机,最后实现字符串拼接就ok! 代码很简单,通俗易懂,直接上代码吧: 1 ...
- 腾讯云TDSQL MySQL版 - 开发指南 分布式事务
由于事务操作的数据通常跨多个物理节点,在分布式数据库中,类似方案即称为分布式事务. TDSQL MySQL版 支持普通分布式事务协议和 XA 分布式事务协议.TDSQL MySQL版(内核5.7或以上 ...
- Walkthrough: Create and use your own Dynamic Link Library (C++)
参考网站:https://docs.microsoft.com/en-us/cpp/build/walkthrough-creating-and-using-a-dynamic-link-librar ...
- C#简单实现表达式目录树(Expression)
1.什么是表达式目录树 :简单的说是一种语法树,或者说是一种数据结构(Expression) 2.用Lambda声明表达式目录树: 1 2 3 4 5 Expression<Func<in ...
- 如果服务器数据更新了,CDN的数据是怎么及时更新的
A:cdn一般用来存静态资源.拿网站来说,当用户访问网站时静态资源从cdn加载.cdn向后段源服务器请求资源并缓存,这个请求过程是周期性的,自动的,称为回源. 当你更新了一个文件,现在正巧还没到cdn ...
- JDBC中级篇(MYSQL)——模拟从数据库中上传下载附件
注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package b_blob_clob; import java.io.BufferedOutputStream; import j ...
- nginx 开启,关闭,重启
2021-08-191. 启动 # 判断配置文件是否正确 cd /usr/local/nginx/sbin ./nginx -t # 启动 cd usr/local/nginx/sbin ./ngin ...
- Linux定时任务(详细)
Linux定时任务一.首先查看是否安装了crontab[root@master ~]# rpm -qa |grep crontabcrontabs-1.11-6.20121102git.el7.noa ...