博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
<Core Java> 4.4 静态域和静态方法
阅读量:5224 次
发布时间:2019-06-14

本文共 2713 字,大约阅读时间需要 9 分钟。

4.4.1 静态域
每个类只有一个被定义为static的静态域;静态域属于类不属于任何独立的对象。(静态域有称类域)
4.4.2 静态常量
静态常量使用较多。例如,在Math类中定义一个静态常量:
public class Math {
    public static final double PI = 3.14159265358979323846;
    .....
}
在程序中可以采用Math.PI的形式来获取这个常量
4.4.3 静态方法
1、静态方法是不能向对象操作的方法。例如,Math类的pow方法:Math.pow(x, a);在运算是没有使用任何Math对象,即没有隐式参数(this)。
2、因为静态方法没有操作对象,所以在静态方法中访问实例域。但是,静态方法可以访问自身的实例域。
public static int getNextId() {
    return nextId;
}
可以通过类名调用该方法:int n = Employee.getNextId;
注释:建议使用类名而不是对象来调用静态方法。
3、使用静态域的两种情况:
(1)一个方法不需要访问对象状态时
(2)一个方法只需要访问量类的静态域时
4.4.5 Main方法
1、不需要使用对象调用静态方法。例如,不需要构造Math对象就可以使用Math.pow。main方法也是一种静态方法
public calss Application {
    public static void main(String[] args) {
        //创建对象。。。
    }
}
main方法不对任何对象操作。静态的main方法将执行并创建程序所需的对象。
提示:每个类可以有一个main方法,这样便于进行单元测试。
class Employee {
    public Empolyee(String n, double s, int year, int month, int day)
    name = n;
    salary = s;
    GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
    hirday = calendar.getTime();
}
...
class static void main(String[] args) {
    Employee e = new Employee("Romeo", 5000, 2003, 3, 31);
    e.raiseSalary(10);    
    System.out.println(e.getName() + "" + e.getSalary());
}
....
}
如果想独立测试Employee类,只要执行java Empolyee
如果Employee类是一个大型应用的一部分,只要执行java Application
并且Employee类中的main方法永不执行
6、源代码:例4-3中的程序包含Employee类,其中有一个静态域nextId,一个静态方法getNextId。将三个Empolyee对象写入数组,然后打印雇员信息。最后,打印下一个可用员工标识来作为静态方法使用的演示。
需要注意:Employee类也有一个静态的main方法用于单元测试。分别运行java Employee和java StaticTest执行两个main方法。
StaticTest.java
[java]
  1. package com.vincent.javacore.statictest;  
  2.   
  3. import com.vincent.javacore.statictest.Employee;  
  4.   
  5. public class StaticTest {  
  6.     public static void main(String[] args) {  
  7.         //创建三个职员列表作为Employee的对象  
  8.         Employee[] staff = new Employee[3];  
  9.         staff[0] = new Employee("Tom"4000);  
  10.         staff[1] = new Employee("Dick"5000);  
  11.         staff[2] = new Employee("Harry"6000);  
  12.           
  13.         //打印每个员工的信息  
  14.         for (Employee e : staff) {  
  15.             e.setId();  
  16.             System.out.println("name: " + e.getName()   
  17.                     + ", id = " + e.getId()   
  18.                     + ", salary: " + e.getSalary());  
  19.             //调用静态方法  
  20.             int n = Employee.getNextId();  
  21.             System.out.println("Next available id = " + n);  
  22.         }  
  23.     }  
  24. }  
Employee.java
[java]
  1. package com.vincent.javacore.statictest;  
  2.   
  3. public class Employee {  
  4.     public Employee(String n, double s) {  
  5.         name = n;  
  6.         salary = s;  
  7.         id = 0;  
  8.     }  
  9.       
  10.     public String getName() {  
  11.         return name;  
  12.     }  
  13.       
  14.     public double getSalary() {  
  15.         return salary;  
  16.     }  
  17.       
  18.     public int getId() {  
  19.         return id;  
  20.     }  
  21.       
  22.     public void setId() {  
  23.         id = nextId;  
  24.         nextId++;  
  25.     }  
  26.       
  27.     public static int getNextId() {  
  28.         return nextId;  
  29.     }  
  30.     public static void main(String[] args) {  
  31.         Employee e = new Employee("Harry"5000);  
  32.         System.out.println("name: "+ e.getName() + ", Salsry: " + e.getSalary());  
  33.     }  
  34.       
  35.     private String name;  
  36.     private double salary;  
  37.     private int id;  
  38.     private static int nextId = 1;  
  39.   
  40. }  

转载于:https://www.cnblogs.com/vincent-hv/archive/2013/02/27/2958557.html

你可能感兴趣的文章
laravel学习笔记(三)视图渲染
查看>>
rmdir
查看>>
SGU 219 Synchrograph tarjian找环,理解题意,图论 难度:3
查看>>
[翻译][架构设计]The Clean Architecture
查看>>
状态压缩DP
查看>>
Shell从入门到精通进阶之四:流程控制
查看>>
腾讯QQ、新浪微博等知名社交网络图标素材
查看>>
Django中用 form 实现登录注册
查看>>
关于__int64的使用!
查看>>
msil指令 收藏
查看>>
JS08(封装可视区域大小的函数、修改窗口改变页面颜色、冒泡的问题、弹出窗口点击空白处隐藏 、选定文字弹出层、动画基本原理、匀速动画封装函数、无限广告轮播图)...
查看>>
理解session
查看>>
正则表达式2
查看>>
Unity3D_(插件)小地图自刷新制作Minimap小地图
查看>>
为什么分布式一定要有Redis?
查看>>
hihoCoder 1233 : Boxes(盒子)
查看>>
HihoCoder 1328 BFS 搜索
查看>>
Day2-h和p标签
查看>>
[回归分析][7]--定性预测变量
查看>>
团队的绩效评估计划
查看>>