类被声明为静态类时,必须为内部类!
反之:静态类一定是内部类!

静态内部类和非静态内部类的区别:

类的声明方式

静 态 类:public static class StaticClass{ … }
非静态类: public class ClassName{ … }

访问类内部成员的权限

静态类:只能访问类内部的静态成员;
非静态类:可访问类内所有成员;

声明类内部成员的权限

静态类:可以声明静态成员和非静态成员;
非静态类:只能声明非静态成员;

类的初始化方式

假设,类结构为:Outer类内包含Inner类,InnerStatic类为Outer类的内部静态类,Inner为非静态类
静态类的初始化:
Outer.InnerStatic innerStatic = new Outer.InnerStatic();
非静态类初始化:
Outer.Inner inner = new Outer().new Inner();
or
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();

何时使用静态类?

情况一

当A类需要使用B类,并且B某类仅为A类服务,那么就没有必要单独写一个B类,因为B类在其他类中不会使用,所以只需将B类作为A的内部类。那么为什么一定要用静态类呢?通过上面类初始化方式可以看出,内部静态类的初始化无需实例化外部类,与对象无关;所以说这种情况推荐将B类声明为A类的内部静态类

public class 地球 {
private 水 water;
public 地球(水 w){
water = w;
}
public int get地球水含量(){
return water.get含量();
}
public String get地球上水的成分(){
return 水.get成分();
}
public static class 水{
int 含量;
public 水(int 含量){
this.含量=含量;
}

    public int get含量() {return 含量;}public static String get成分(){return "H2O";}
}

}
调用

public test(){dq = new 地球(new 地球.水(78));String x = dq.get地球上水的成分();int y = dq.get地球水含量();x= "水的构成:"+x + "当前地球含水量:"+y;
}

如果使用非静态类也可以实现上面的功能,水类可以作为内部类出现,也可以单独建类,使用情况自行脑补!

情况二

当某个类需要接受多个参数进行初始化时,推荐使用静态类构建。

没有使用静态类的例子:

public class Car {
private String name;
private String model;
private int height;
private int width;

public Car(String name){this.name=name;
}
......
//这里省略了 若干Car类的构造函数
public Car(String name,String model,int height,int width){this.name=name;this.model=model;this.height=height;this.width=width;
}
......

}
下面调用可以看出,未使用静态类的初始化构造函数 初始化变量很不灵活。

public class test {
Car car1 = new Car(“捷达王”,“大众捷达”,1650,1950);
Car car2 = new Car(“皇冠”);
car2.setModel(“丰田皇冠3.0”);
car2.setHeight(“1920”);
}
这个例子的变量只有4个,假如有40个变量呢,这40个变量又有选择性的初始化呢?那么必须使用静态类进行构建!下面是使用静态类的实现:

public class Car {
private String name;
private String model;
private int height;
private int width;

private Car(Builder build){this.name=build.name;this.model= build.model;this.height=build.height;this.width=build.width;
}
public static class Builder {private String name;private String model;private int height;private int width;public Builder(){}public Builder withName(String name){this.name=name;return this;}public Builder withModel(String model){this.model=model;return this;}public Builder withHeight(int height){this.height=height;return this;}public Builder withWidth(int width){this.width=width;return this;}public Car build(){return new Car(this);}
}

}
下面是调用代码

public class test {
Car jettaCar = new Car.Builder().withName(“捷达王”)
.withModel(“大众捷达”)
.withHeight(1650)
.withWidth(1950)
.build();
Car toyotaCar = new Car.Builder().withName(“皇冠”)
.withModel(“丰田皇冠3.0”)
.withHeight(1920)
.build();
}

总结

静态类一定是内部类;
静态类只能访问静态成员;
只有静态类才可以声明静态成员;

Java静态类的使用相关推荐

  1. java静态类_Java静态类

    java静态类 Today we will look into java static class. It's a good interview question to test your knowl ...

  2. Java 静态类、静态方法和静态变量

    转载自Java 静态类.静态方法和静态变量 Java 静态类.静态方法和静态变量 static 是Java中的一个关键字,我们不能声明普通外层类或者包为静态的.static用于下面四种情况. 1.静态 ...

  3. 日常小结-java静态类及其应用

    概述 静态类必定是内部类,但内部了不一定是静态类. 特性以及与非静态内部类的区别 静态类的特效主要分为三点 静态内部类只能访问静态成员和静态方法,普通的内部类可以访问任意方法. 静态内部类可以声明静态 ...

  4. java静态类和非静态类_关于java:静态和非静态内部类的区别?

    我正在阅读有效的Java 2 -项目22,它在标题中写道: "Favor static member classes over non-static" 但是在这一章的结尾 Impl ...

  5. java 静态类 静态方法_JAVA的静态变量、静态方法、静态类

    静态变量和静态方法都属于静态对象,它与非静态对象的差别需要做个说明. (1)Java静态对象和非静态对象有什么区别? 比对如下: 静态对象                                ...

  6. java 静态类的实现_[Java教程]Javascript 静态类的实现

    [Java教程]Javascript 静态类的实现 0 2012-04-06 11:00:05 早些天写过了类的实现,接着我们看看的静态类的实现.这东西在Javascript里用得会非常的频繁,因为针 ...

  7. java 静态类实例_Java中多个类的静态实例?

    我是新的请不要介意,如果你发现问题愚蠢.我正在搞乱单身代码.我改变了一点(我的问题与单身无关,是的我已经删除了单实例检查).我的问题是虽然java中的类实例只能是一个为什么输出中有两个静态类" ...

  8. java 静态类 创建_Java 中的静态类

    Java 语言中可以定义一个静态类吗? 答案是显而易见的:YES ,Java 语言存在静态类. 我们都知道,Java 语言中存在 静态变量 .存在 静态方法 .也存在 静态块.其实,Java 语言还存 ...

  9. java类注入_[java]静态类中使用注入

    场景:在一个java类中,需要使用某个service,但是这个类不是单例,并且无法直接取得spring中的bean,这时就会把这个service放入静态工具类中 注:静态类中是无法直接注入对象的,要采 ...

  10. java 静态类 new_Java之静态内部类(static class)

    在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的(利用static关键字修饰),也可以是非静态的. 一.静态内部类的使用目的. 在 定义内部类的时候,在其前面加上一个权限修饰符sta ...

最新文章

  1. 重磅教程!帮你全面彻底搞定Material design的学习笔记
  2. 英特尔公布新技术路线图,将为 AWS、高通代工芯片
  3. 《learning ROS for robotics programming》
  4. 小米造车150天:烈火烹油第一枪
  5. java setmnemonic_java – 关于setMnemonic的一些问题
  6. java 重写session_使用Shiro重写Session 自定义SESSION
  7. windows系统bat批处理 windows 关机,重启,锁定,休眠,注销
  8. java读取文件的万能解决方案
  9. c free 语言随机抽签,javascript随机抽签程序详解
  10. cameralink图像接收与发送代码
  11. Java中实体类名称后缀VO,DTO的含义
  12. png批量转换成jpg
  13. 使用 sed 替换字符串中最后一次出现的字符
  14. win系统的阿里云服务器部署IDEASpringBoot项目保姆级教程
  15. 计算机毕业设计网吧管理,【毕业设计】计算机毕业设计网吧管理系统
  16. Testin云测云层天咨众测学院开课了!
  17. 【小白学前端】化腐朽为神奇-HTML+CSS3实现电影票(day01-3)
  18. 群晖QuickConnect与DDNS之间有何区别?
  19. SQL Server 2005 连接到服务器失败解决方案
  20. Java经典入门教程!java工程师的进阶之路

热门文章

  1. syslog和rsyslog有什么不同?
  2. Redis 启动的三种方法
  3. 为什么微软拼音会莫名其妙变繁体以及Junit的一些笔记
  4. 一份合格的软件需求规格说明书的要求
  5. 周哲_java软件工程师 简历
  6. 涨停缩量平台调整选股策略(附筛选python代码)
  7. 为何有些文献查不到DOI?
  8. 微软技术交流群 303295519
  9. mysql create index_MySQL使用CREATE INDEX创建索引
  10. [ARM] ARM处理器的7种工作模式和2种工作状态