static可以修饰哪些成员

  • 成员变量---可以修饰
  • 构造方法---不可以
  • 方法---可以修饰
  • 初始化块---可以修饰
  • 内部类(包括接口、枚举)---可以修饰
  • 总的来说:静态成员不能访问非静态成员

静态变量

  • static修饰的变量为静态变量
  • 在创建对象时,静态变量位于方法区中,而非像实例变量一样,位于堆内存中
  • 一个类的所有对象共用相同静态变量,通过类名来调用静态变量,通过实例来调用虽然也符合语法,但不推荐
  • 示例:静态变量的一个用法
class Employee{
private static int nextId=1;
private int id;
public void setId{
id=nextId;
nextId++;
}
}
Employee harry=new Employee();
harry.setId();

静态常量

  • 静态变量上再加个final修饰,则为静态常量
  • 比如,Math类的的E和PI
    public final class Math {
private Math() {}
public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;
.
.
.
}
  • 一般不要把实例变量设计为public,而是再写个set和get方法,但final修饰的变量却没关系,可以设置为public

静态方法

  • static修饰方法
  • 静态方法不能操作对象,因而不能调用实例变量,只能访问到静态变量
  • 静态方法相当于没有this隐式参数的传递
  • 通过类名调用方法,比如:Math.pow(x,a);通过对象调用静态方法,是符合语法规则的,但是不推荐
  • 即使某个类型的引用为null,但也可以调用静态方法
  • 什么时候用静态方法:
    • 一个方法不需要访问对象的状态,所需的参数都通过方法签名(显式参数)传入
    • 一个方法只需要访问静态变量
  • 静态方法示例:
    • java.lang.Math的所有方法都是静态方法

静态初始化块

单例类

  • 什么是单例类:

    • 这个类从始至终最多只能创建一个实例
  • 何时用:
    • 不允许自由创建该类对象,只允许创建一个对象的场景
    • 比如:可能只能有一个窗口管理器;一个数据库引擎访问点
  • 如何设计该类:
    • 将该类的所有构造器用private修饰,外部就不能用构造器随意构造实例了
    • 提供一个public方法作为访问点,用来创建那么一个实例,但要用static修饰,因为调用该方法之前还不存在对象,只能通过类名调用类方法
    • 再创建一个static变量来保存这个唯一的实例
  • 示例代码:
public class T1{
public static void main(String[] args) {
Singleton s1=Singleton.getInstance();
Singleton s2=Singleton.getInstance();
System.out.println("s1和s2是否指向同一个对象: "+(s1==s2));
}
}
class Singleton{
private static Singleton instance; // 3. 用private static变量保存唯一的实例
private Singleton(){} //1. 用private修饰构造方法
public static Singleton getInstance(){ //2. 提供一个public static方法返回实例
if (instance==null){
instance=new Singleton(); //方法体保证最多只有一个实例
}
return instance;
}
}

其他

  • 非静态方法,相当于有显式和隐式两个参数

    • 显式参数:从方法签名中传入的
    • 隐式参数:对象调用方法时,传入的this

0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类的更多相关文章

  1. Java学习笔记(二十四):单例设计模式singleton

    为什么要使用singleton设计模式? 假设设计了一个操作数组的工具类(Tools),里面有一个锤子的方法(Hammer),如果不使用singleton设计模式,每次想调用Hammer方法都需要ne ...

  2. 0027 Java学习笔记-面向对象-(非静态、静态、局部、匿名)内部类

    内部类 内部类就是把一个类写在另一个类的内部 用途: 如果一个类只希望它被某一个类访问,那么可以把它定义在另一个类的内部,并用private修饰 内部类可以访问它所在外部类的private成员:但所在 ...

  3. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  4. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  5. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  6. Java学习笔记之---static

    Java学习笔记之---static static不能修饰类,局部变量 (一)静态成员的特征 static+属性  静态属性 无论实例化出来多少个对象,都会共用同一块静态空间,类对象共享 静态成员从第 ...

  7. 0029 Java学习笔记-面向对象-枚举类

    可以创建几个对象? n多个:大部分的类,都可以随意创建对象,只要内存不爆掉 1个:比如单例类 有限的几个:采用单例类的设计思路,可以只允许创建少数的几个特定的对象:还有就是枚举类. 创建少数几个对象, ...

  8. 1.6(java学习笔记)static关键字

    static关键字 1.static修饰变量也称静态变量,静态变量存放在静态区被该类的所有对象共享. 例如,定义了一个类class User{static Sring city = "a城& ...

  9. Java学习笔记8---类的静态成员变量与静态成员方法的访问与调用方式

    (注:静态变量修改为静态成员变量,静态方法改为静态成员方法) 静态成员变量又称类变量,静态成员方法又称类方法,它们统称为静态成员或类成员.静态成员由static修饰,是属于整个类的,所有的对象共享这些 ...

随机推荐

  1. 电子商务中:B2C、B2B、C2B、C2C、O2O、P2P

     c2c实际是电子商务的专业用语,是个人与个人之间的电子商务.比如一个消费者有一台电脑,通过网络进行交易,把它出售给另外一个消费者,此种交易类型就称为C2C电子商务.淘宝是属于C2C模式的.   c2 ...

  2. 容器--EnumMap

    一.概述 EnumMap是一类特殊的Map, 其特殊之处在于KEY需要是枚举类型,由于枚举类型的特点是值的个数是固定的,所以,对于EnumMap来说,其所能存储的个数也就是固定的了.这种类型的Map相 ...

  3. MyEclipse10 中的两种FreeMarker插件的安装与配置

    第一个插件是:                                       freemarker-ide MyEclipce10.0中安装FreeMarker插件,这绝对是最简单的方法 ...

  4. FilterDispatcher已被标注为过时解决办法 >>> FilterDispatcher <<< is deprecated!

    一些struts2的教程都是比较早的,当我们基于较新版本的struts2来实现代码的时候,往往会出现一些问题.比如这个警告:FilterDispatcher isdeprecated! 在web.xm ...

  5. loadrunner11中java vuser引用jar包

    1.创建工程,新建类,HelloWorld.java,代码如下: package com.liuke; public class HelloWorld { public String getHello ...

  6. Spring4学习笔记 - 配置Bean - 自动装配 关系 作用域 引用外部属性文件

    1 Autowire自动装配 1.1 使用:只需在<bean>中使用autowire元素 <bean id="student" class="com.k ...

  7. Jsp九大内置对象及其作用域

    本文主要介绍Jsp九大内置对象及其作用域,着重介绍几个常用的,希望对初学者有所帮助. 1 Jsp九大内置对象 2 详细介绍 2.1 request javax.servlet.http.HttpSer ...

  8. ArcGIS server开发之API for js 本地部署

    ArcGIS Server for javascript 本地部署 第一次使用arcgis server for js开发,在经验方面还有很多的不足,所以将自己在开发过程中遇到的问题写出来与大家共享. ...

  9. CSS3与页面布局学习笔记(三)——BFC、定位、浮动、7种垂直居中方法

    一.BFC与IFC 1.1.BFC与IFC概要 BFC(Block Formatting Context)即“块级格式化上下文”, IFC(Inline Formatting Context)即行内格 ...

  10. abap 字符串处理

    1).SHIFT:截断字符串 SHIFT {c} [BY {n} PLACES] [{mode}].:      作用:去掉字符串的前n个位置的字符,如果n未指定,默认为1,如果指定的n小于等于0,则 ...