精华内容
下载资源
问答
  • Java静态域与静态方法-笔记 首记: 关键字static的含义是:属于类,但不属于类对象的变量和函数,这与C++中的含义是相同的 静态域 静态域指的是类中用关键字static修饰的域,每个类中只有一个这样的域,每一个...

    Java静态域与静态方法-笔记

    首记:关键字static的含义是:属于类,但不属于类对象的变量和函数,这与C++中的含义是相同的


    1. 静态域
      静态域指的是类中用关键字static修饰的域,每个类中只有一个这样的域,每一个对象对于所有的实例域都有一个自己的拷贝。
    class Employee
    {
      private static int nextId = 1; // 静态域
      private static final int classId = 2019; // 静态常量
      private int id;
    }
    
    1. 静态常量
      即用关键字final修饰的静态域。

    2. 静态方法
      在形式上,静态方法指的是在类中用关键字static修饰的方法,不过在功能上有些需要注意的点:

    • 静态方法不能向对象实施操作,这个对象指的是包含这个方法的类的对象
    • 由上推知,静态方法不能操作对象中的实例域,但是它可以访问静态域
    • 这个方法可以直接通过相应的类名调用
    • 下面两种情况可以考虑将某个方法设置为静态方法:
      • 不需要访问对应的对象状态,其所需要的参数都是通过显式参数提供的;
      • 只需要访问类中的静态域。
    class Employee
    {
      /* ... */
      // 静态方法
      public static int getNextId()
      {
        return nextId;
      }
    }
    
    // 调用方式:
    int n = Employee.getNextId();
    

    展开全文
  • Java静态域与静态方法

    千次阅读 2017-08-04 16:01:14
    Java静态域与静态方法@(JAVA)[java]在Java中,静态修饰符static只能用于类的成员变量与成员方法。(一)静态域1、静态变量如果将某个变量定义为static,那么这个类及其所有对象共享同一个值,它在内存中只存在一份,...

    Java静态域与静态方法

    @(JAVA)[java]

    在Java中,静态修饰符static只能用于类的成员变量与成员方法。

    (一)静态域

    1、静态变量

    如果将某个变量定义为static,那么这个类及其所有对象共享同一个值,它在内存中只存在一份,严格来说是在每个JVM中只存在一份。
    比如:

    public class Employee{
        private int id;
        private static int nextId = 1;
    }
    

    每个Employee对象都有一个id的拷贝,而且它们的值并不相同。但所有的Employee共享同一个nextId的值,它在JVM中只存在一份。

    2、静态常量

    其实静态变量使用得相对较少,它一般会结合一些设计模式使用(如单例)。但静态常量却使用得非常的多,如Math类中的:

    public static final double PI = 3.1415926538979323864;
    

    另一个使用得非常多的是System.out,它在System类中被声明:

    public static final PrintStream out = ...
    

    (二)静态方法

    静态方法不需要先实例化对象,再进行调用,面是可以直接使用类名进行调用。常用于一些工具类(utils等),如Math类中的很多方法:

    Math.pow(5,2);
    

    静态方法不能操作对象,也不能在静态方法中访问实例域(但可访问静态域)。

    在以下2种情况使用静态方法:
    * 【工具类】一个方法不需要访问对象状态,其所需参数都是通过显式参数提供(如Math.pow())
    * 一个方法只需要访问类的静态域(如Employee.geetNextId())

    (三)静态成员类

    请参考《effective java》第24条

    (三)小结

    1. 静态域在内存中只存在一份,所有对象共享。静态常量更觉,静态变量更多与一些设计模式结合使用。
    2. 静态方法更多用于工具类,或者是只访问类的静态域的情形。
    展开全文
  • 在几乎所有的程序里,main方法都被标记为static修饰符。那么我们就来讨论一下这个修饰符。包括静态域、静态常量和静态方法

    在几乎所有的程序里,main方法都被标记为static修饰符。那么我们就来讨论一下这个修饰符。

    一、静态域

    如果将一个域定义为 static,每个类中只有一个这样的域。而每一个对象对于所有的实例域却有自己的一个拷贝。例如,在前面文章中用到的 Employee 类中,我们增加一个 ID 号。这里给它添加一个实例域 id 和静态域 nextId。

    class Employee{
        private static int nextId = 1;   //静态域
        private int id;    //实力域
    
        ...
    }

    现在,每一个员工都有自己的一个 id 域,但这个类的所有实例将共享一个 nextId 域。换句话说,如果有 1000 个员工类的对象,则有 1000 个实力域 id。但是,只有一个静态域 nextId。即使没有一个员工对象,静态域 nextId 也存在。它属于类,而不属于任何独立的对象。(在绝大多数的面向对象程序设计语言中,静态域被称为类域。术语“static”只是沿用了 C++ 的叫法,并无实际意义。)

    下面有代码来演示一下:

    public class EmployeeTest {
        public static void main(String[] args){
            Employee[] temp = new Employee[5];
    
            for (int i = 0; i < 5; i++)
                temp[i] = new Employee();
    
            for (int i = 0; i < 5; i++){
                temp[i].setID();
                System.out.println("My number is: " + temp[i].getID());
            }
        }// main
    }
    
    class Employee{
    
        private int id;
        private static int nextId = 1;
    
        public Employee(){}
    
        public void setID(){
            id = nextId;
            nextId++;
        }
    
        public int getID(){
            return id;
        }
    
    }

    运行结果为:
    这里写图片描述
    可以看到,nextId 是在不断增加的,有5个对象,但是只有一个静态域 nextId。

    二、静态常量

    静态变量用的比较少,但是静态常量却使用得比较多。例如,在 Mathematics 类中定义了一个静态常量:

    public class Mathematics{
        ...
        public static final double PI = 3.14159265358979323846;
        ...
    }

    在程序中,可以通过 Mathematics.PI 的形式获得这个常量。

    如果 static 被省略,PI 就变成了 Mathematics 类的一个实例域。需要通过 Mathematics 类的对象访问,并且每一个 Mathematics 类的对象都有自己的一个 PI 的拷贝。

    三、静态方法

    静态方法是一种不能向对象实施操作的方法。例如,Math 类的 pow 方法就是一个静态方法。表达式 Math.pow(x, a) 计算x的a次幂。在运算时,不使用任何的 Math 对象。换句话,没有隐式的参数。

    可以认为,静态方法时没有 this 参数的方法。

    Employee 类的静态方法不能访问 Id 实力域,因为它不能操作对象。但是,静态方法可以访问自身中的静态域。下面是一个使用静态方法的示例:

    public static int getNextId(){
        return nextId;   //returns static field
    }

    但是可以通过调用这个方法:int n = Employee.getNextId();
    当然,这个方法是可以省略 static 关键字的,但是,需要通过 Employee 类对象引用调用这个方法。

    注意:可以使用对象调用静态方法。例如,如果 temp 是一个 Employee 对象,可以用 temp.getNextId() 代替 Employee.getNextId()。不过,这种方式很容易造成混淆,其原因是 getNextId 方法计算的结果与 temp 毫无关系。但是建议使用类名,而不是对象来调用静态方法。

    在以下两种情况下使用静态方法:
    1.一个方法不需要访问对象状态,其所需参数都是通过显示参数提供(例如:Math.pow)。
    2.一个方法只需要访问类的静态域(例如:Employee.getNextId)。

    展开全文
  • 1.静态域 如果将域定义为static,每个类只有一个这样的域。 例如上面这个员工类,每一个员工都有自己的id,但是这个类的所有实例将共享一个nextId域。 也就是说,1000个员工对象,每一个与员工都有自己的id。但是...

    1.静态域

    如果将域定义为static,每个类只有一个这样的域。
    在这里插入图片描述
    例如上面这个员工类,每一个员工都有自己的id,但是这个类的所有实例将共享一个nextId域。
    也就是说,1000个员工对象,每一个与员工都有自己的id。但是只有一个静态域nextId。
    即使没有一个Employee对象,静态域nextId依然存在。
    可以理解静态域就是一个类域


    2.静态常量

    静态变量使用的比较少,但是静态常量使用的比较多。
    例如Math类里面的pi=3.14159…
    想让这个pi为类域,而不是Math类的实例域,需要通过Math类对象访问pi,并且每一个Math对象都有自己的一份pi拷贝。
    在这里插入图片描述
    public:可以被外部访问这个pi
    static:静态域
    double:数据类型
    final:

    final关键字讲解

    可以将实例域设置为final,final应该有两个性质。

    1. 在构建对象的时候必须初始化
    2. 初始化之后就不能改变了(const)

    也就是这个域需要被设置,但是之后不能够被更改

    在这里插入图片描述
    最好不要将域设计为public,但是这个是外部需要访问的常量,因此加上了final关键字之后,外部就不能够对其进行修改了


    3. 静态方法

    静态方法是一种不能向对象实施操作的方法,例如Math类的pow方法就是一个静态方法,求幂函数
    在这里插入图片描述
    两个参数x和a都是外部传入,在运算的时候,不使用Math里面的任何对象

    另外静态方法可以访问自身的静态域,例如下面:
    在这里插入图片描述
    不需要通过类的对象,就可以访问这个静态方法
    在这里插入图片描述
    静态方法返回静态域。静态域的计算与实例毫无关系,所以直接使用类名就可以。
    有两种情况需要使用静态方法

    1. 一个方法不需要访问对象状态,其所需要的参数都是通过显示参数提供(例如Math.pow,因此就不需要实例化,因为都不需要用到实例参数)
    2. 一个方法只需要访问类的静态域(例如:Employee.getNextId)

    4.工厂方法

    静态方法还有另外一个常见的用途。

    类似 LocalDate 和 NumberFormat 的类使用静态工厂方法 ( factory method) 来构造对象 你已经见过工厂方法 LocalDate.now 和 LocalDate.of

    NumberFormat 类如下使用工厂方法生成不同风格的格式化对象
    在这里插入图片描述
    在这里插入图片描述


    5.main方法

    不需要使用对象调用静态方法。例如不需要构造Math类对象就可以调用Math.pow
    同理,main方法也是一个静态方法。
    在这里插入图片描述
    main方法不对任何对象进行操作。事实上,在启动程序时候,还没有任何一个对象。静态的main方法将执行并创建程序运行时需要的对象。

    在类里面添加main方法是一个很好的对类进行单元测试的方法
    如果这个类是更大型应用的一个部分,那么这个类的main方法就永远不会执行。

    展开全文
  • Java静态域(属性、方法、类)

    千次阅读 2014-05-29 21:12:18
    如果将域定义为static,那么每个类中只有一个这样的域。...这里给Employee类添加一个实例域id和一个静态域nextId: class Employee{ ...... private int id; private static int nextId = 1; } 现在
  • java静态域实例域

    2009-12-17 21:51:32
    了解java 静态域和实体域与构造方法的运行先后。
  • 目录(一)静态域(二)静态常量(三)静态方法 (一)静态域 如果将静态域定义为 static ,每个类只有一个这样的域。假如给学生类添加一个实例域id与静态域nextId,那么每个学生对象都有一个自己的id域,但这个类的...
  • java中的域分为两类:静态域(一个类中只有一个这样的域)、实例域(每一个对象对于所有的实例域都有自己的一份拷贝) 静态域 如果将域定义为static,那么每个类中只有一个这样的域。 实例域 每一个对象对于所有的...
  • JAVA中的域,静态域,实例域

    千次阅读 2018-12-03 19:37:59
    JAVA中的域,静态域,实例域 JAVA中的域,静态域,实例域 1.java中的域 所谓的域,翻译成英文就是field, 也就是我们常说的字段,或者说是属性。 比如类的字段(属性),局部的,全局的。所谓域,其实是“field”的...
  • java类中静态域、块,非静态域、块,构造函数的初始化顺序,通过本例子,能够清楚了解到java类的初始化顺序
  • 1.java中的域  所谓的域,翻译成英文就是field, 也就是我们常说的字段,或者说是属性。...包括实例域和静态域静态域又叫类域。  java中对象中的数据称为实例域(instance field)。 2.静态域    如果将
  • Java中的域、实例域、静态域

    千次阅读 2013-05-28 10:09:50
    1.java中的域  所谓的域,翻译成英文就是field, 也就是我们常说的字段,或者说是属性。...包括实例域和静态域静态域又叫类域。  java中对象中的数据称为实例域(instance field)。  【实例域对应的
  • Java中的域,静态域,实例域 越丘 2019-03-09 16:28:44 744 收藏 1 分类专栏: Java 版权 域 所谓的域,是field的翻译,也就是我们常说的字段,或者属性。比如类的字段(属性),局部的,全局的。 静态...
  • 静态域 静态域属于类,不属于任何独立的对象,类没有创建实例,静态域也存在。 静态常量 eg. public class Math { public static final double PI = 3.141592653; } 通过Math.PI获得常量。若去掉static,...
  • 1、静态域 如果将一个类中的域定义为static,则这个域称为静态域,且每个类中只有一个这样的域。而每个对象对于所有的实例域都有自己的一根拷贝。当一个类实例多个对象,则每个实例都拥有自己的实例域,但它们都...
  • java静态域,静态常量,静态方法

    千次阅读 2015-01-14 10:44:07
    静态域:如果将类中的域定义为static,则这个域属于这个类,而不属于这个类的某个对象,每个类中只有 一个这样的域,而每一个类对象对于所有的实例域(即没有定义为static的域)都有自己的一份拷贝。例如: class ...
  • 面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个... 我们大家都知道,对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序以此是 (静态变量、静态初始化块...
  • JAVA中的域,静态域,实例域   1.java中的域  所谓的域,翻译成英文就是field, 也就是我们常说的字段,或者说是属性。 比如类的字段(属性),局部的,全局的。所谓域,其实是“field”的翻译 然后实例...
  • Java面向对象(二) 静态域、代码块和内存区域图 静态域 将域定义成static后,每个类中只有一个这样的域,与类相关的,也称为类成员。但是每个对象对于所有的实例域却都有自己的一份拷贝。 静态域会随着类的加载...
  • Java中的域,静态域,实例域

    千次阅读 2019-03-09 16:28:44
    静态域 也就是静态属性,我们可以单独为它设一个域,这个域又叫做类域。它是属于类的,不需要类的实例化就能够使用 static{ int field1=1; int field2=2; } 实例域 我们创建实例之后这个域才被激活能够被...
  • 静态域(也叫做类变量) 如果将域(成员变量)定义为static形式,这个域就叫做静态域  特点: 这个类的所有实例将共享这个静态域。 即使没有创建该类对象,这个静态域也存在。它属于类,不属于任何独立的对象...
  • 静态域与静态方法

    2018-08-06 15:18:09
    静态域与静态方法 静态域 如果将域定义为static,每个类中只有一个这样的域,这个类的所有对象将共享这个域,这个域称为静态域。 这个域属于类,而不属于任何独立的对象。 静态常量 静态常量使用得比较广泛...
  • Java中的常量、静态域与静态方法

    千次阅读 2015-09-17 10:22:17
    2、静态域:关键字static ,每一个类中只有一个这样的域,而每个对象对于所有的实例域却都有自己的一份拷贝,它属于类,而不属于任何独立的对象; 3、静态常量:如果一个域被定义为static final,则这个域就是一个...
  • Java学习笔记【静态域与静态方法】

    千次阅读 2015-09-24 15:15:01
    1、静态域  如果将域定义为static,每个类中只有一个这样的域。 class Employee { private static int nextId = 1; private int id; ... } //现在,每一个雇员对象都有一个自己的id域,但这个类的所有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 171,334
精华内容 68,533
关键字:

java静态域

java 订阅