浅析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 ...
随机推荐
- mongodb中时间跟实际时间相差8小时----时区问题
遇到的问题 参考:mongo中时间跟实际时间相差8小时 Mongo中一个Collection有一个字段用来存放数据的插入时间,但记录的时间比实际时间晚了8小时. 查询得知存储在mongodb中的时间是 ...
- CNN卷积神经网络详解
前言 在学计算机视觉的这段时间里整理了不少的笔记,想着就把这些笔记再重新整理出来,然后写成Blog和大家一起分享.目前的计划如下(以下网络全部使用Pytorch搭建): 专题一:计算机视觉基础 介 ...
- 06.SpringMVC之参数绑定
默认支持的参数类型一 HttpServletRequest .HttpServletResponse .HttpSession.java.security.Principal.Locale .Inpu ...
- [ASP.NET MVC]@RenderSection,@RenderBody(),@RenderPage
1.@RenderBody() 作用和母版页中的服务器控件类似,当创建基于此布局页面的视图时,视图的内容会和布局页面合并,而新创建视图的内容会通过布局页面的@RenderBody()方法呈现在标签之 ...
- Git中使用.gitignore忽略文件的推送
转载自:https://blog.csdn.net/lk142500/article/details/82869018 windows下可以用另存为生成gitignore 文件 1 简介 在使用Git ...
- C++、Java、Python、Linux、Go、前端、算法,慕课资料分享
C++.Java.Python.Linux.Go.前端.算法,慕课资料分享 微信公众号:大道同行JAVA 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 又见面了.废话不多说,最近多了一些在 ...
- 2021年哪个低代码平台更值得关注?T媒体盘点国内主流低代码厂商
2020年圣诞前夜,国内知名创投科技媒体T媒体旗下的T研究发布了2020中国低代码平台指数测评报告.报告除了对国内低代码行业现状进行总结外,还对主流低代码厂商的市场渗透和曝光进行测评. 报告认为,低代 ...
- HCNP Routing&Switching之OSPF特殊区域
前文我们了解了OSPF LSA更新规则以及路由汇总相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15231880.html:今天我们来聊一聊OSPF的 ...
- SSH整合(二)
SSH框架实现登录.新闻增删改查.树形菜单 项目结构 pom.xml 网不好不要一次引入太多,容易下不全 <project xmlns="http://maven.apache.org ...
- 作用域 作用域链 闭包 思想 JS/C++比较
首先,我说的比较是指JS中这种思想/实现方式与C++编译原理中思想/实现方式的比较 参考链接:(比较易懂的介绍,我主要写个人理解) 作用域链: http://www.cnblogs.com/dolph ...