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

内部类:

1、内部类中的变量和方法不能声明为静态的。

2、内部类实例化:B是A的内部类,实例化B:A.B b = new A().new B()。

3、内部类可以引用外部类的静态或者非静态属性及方法。

静态内部类:

1、静态内部类属性和方法可以声明为静态的或者非静态的。

2、实例化静态内部类:B是A的静态内部类,A.B b = new A.B()。

3、静态内部类只能引用外部类的静态的属性及方法。

inner classes——内部类

static nested classes——静态嵌套类

其实人家不叫静态内部类,只是叫习惯了,从字面就很容易理解了。

内部类依靠外部类的存在为前提,而静态嵌套类则可以完全独立,明白了这点就很好理解了。

非静态内部类中的变量和方法不能声明为静态的原因

静态类型的属性和方法,在类加载的时候就会存在于内存中。使用某个类的静态属性和方法,那么这个类必须要加载到虚拟机中。但是非静态内部类并不随外部类一起加载,只有在实例化外部类之后才会加载。

我们设想一个场景:在外部类并没有实例化,内部类还没有加载的时候如果调用内部类的静态成员或方法,内部类还没有加载,却试图在内存中创建该内部类的静态成员,就会产生冲突。所以非静态内部类不能有静态成员变量或静态方法。

String,StringBuilder,StringBuffer的区别

  • String 字符串常量
  • StringBuffer 字符串变量(线程安全)
  • StringBuilder 字符串变量(非线程安全)

性能上通常StringBuilder > StringBuffer > String。

String是不可变对象,每次对String类型进行改变的时候都等同于生成了一个新的String对象,然后将指针指向新的String对象,所以性能最差,对于要经常改变内容的字符串不用String。

StringBuffer是字符串变量,对它操作时,并不会生成新的对象,而是直接对该对象进行更改,所以性能较好。

StringBuilder和StringBuffer一样,是字符串变量,但是他不带有synchronized关键字,不保证线程安全,所以性能最好。在单线程的情况下,建议使用StringBuilder。

总体来说:

  • String:适用于少量的字符串操作的情况。
  • StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况。
  • StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况。

来一些问题:

下面这段代码的输出结果是什么?

String a = "helloworld";String b = "hello" + "world";System.out.println((a == b));

输出结果为:True。

原因是String对字符串的直接相加,会在编译期进行优化。即hello+world在编译时期,被优化为helloworld,所以在运行时期,他们指向了同一个对象。我们也可以推理,对于直接字符串的相加,String不一定比其余两个慢。

下面这段代码的输出结果是什么?

String a = "helloworld";String b = "hello"; String c = b + "world"; System.out.println((a == c));

输出结果为:False。

原因是c并非两个字符串直接相加,包含了一个字符串引用,这时不会做编译期的优化。所以a、c最终生成了两个对象,这时他的效率低。

集合和数组之间的相互转换

数组变集合:

通常我们会回答的是以下代码:

List list = Arrays.asList(array);

但这并不是很好的答案,此时组合成的list是Arrays里面的一个静态内部类,该类并未实现add、remove方法,因此在使用时存在问题。

可以这样:

String array[]= {"hello

静态属性_Java面试题—内部类和静态内部类的区别相关推荐

  1. Java面试题—内部类和静态内部类的区别

    内部类和静态内部类的区别 内部类: 1.内部类中的变量和方法不能声明为静态的. 2.内部类实例化:B是A的内部类,实例化B:A.B b = new A().new B(). 3.内部类可以引用外部类的 ...

  2. java怎么访问静态属性_Java基础——java静态变量面试题

    Java面试中主要考察的就是应聘者的基础知识的掌握情况,静态变量是属于静态存储方式,是java中基础性的内容.下面就为大家准备了10道java静态变量面试题,希望可以帮助到有面试需要的朋友们. 1.s ...

  3. java 访问内部类的属性_java中的内部类详细总结

    内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液.跳动) 显然, ...

  4. java 静态内部类 内部类_Java中内部类和静态内部类的区别

    内部类和静态内部类 示例 public class OuterClass { private int numPrivate = 1; public int numPublic = 2; public ...

  5. java内部类和静态内部类的区别

    1 相同点 使用的时候,import的时候,除了包名,还要带外部类. 2 不同点 2.1 对象创建的方式不同 静态内部类创建对象的时候,独立于外部类及其对象,就好像它是一个独立的类,可以和外部类一样使 ...

  6. java 内部类和静态内部类的区别

    private class InnerClass {         // 只有在静态内部类中才能够声明或定义静态成员         // private static String tt = &q ...

  7. 什么是内部类?有什么作用?静态内部类和非静态内部类的区别?

    一. 定义 放在一个类的内部的类我们就叫内部类. 二. 作用 1.内部类可以很好的实现隐藏 一般的非内部类,是不允许有 private 与protected权限的,但内部类可以: 平时我们对类的访问权 ...

  8. 内部类与静态内部类区别及举例

    文章目录 1.内部类与静态内部类的区别 2.举例说明 2.1 内部类 2.2 静态内部类 1.内部类与静态内部类的区别 静态内部类相对与外部类是独立存在的,在静态内部类中无法直接访问外部类中的变量.方 ...

  9. Java面试题之类的静态代码块和静态属性等的加载顺序

    如以下面试题: /** * @author hjs * @date 2019/3/62:41 * @Dec */public class B { public static B t1 = new B( ...

最新文章

  1. Web新动力 ——Ajax
  2. 深入剖析HADOOP程序日志
  3. 一文读懂HTTP/2 及 HTTP/3特性
  4. llvm编译器实战教程第二版_LLVM编译器实战教程
  5. [AGC014D] Black and White Tree(树形DP,博弈)
  6. java math 函数_Java中Math类常用函数总结
  7. SpringBoot:ApplicationEvent与ApplicationListener
  8. 从零手动实现简易Tomcat
  9. Java Web ServletResponse
  10. 怎么从某个div跳转到另一个_另一个伊甸蓝不够时候怎么办 MP没了怎么做
  11. 签到界面加图片java_签到功能实现,没有你想的那么复杂(二)
  12. php嗅探链接,教你如何利用php来嗅探劫持服务器数据
  13. 计算机学数字电子基础知识,什么是数字电路?新手如何快速学习数字电路基础?...
  14. 2017北京理工大学上机(二):二分查找
  15. android 识别车牌颜色,Android、ios移动端车牌识别sdk / 车牌识别API
  16. 中国船舶制造行业市场运行动态及发展前景分析报告2022-2028年
  17. python utf 8 mac_Mac python 开发环境一些设置
  18. 计算机计算乘除法的原理
  19. java读取word文档的复杂表格_poi读取word表格 java POI 如何读取word的表格中的表格...
  20. 积微速成计划第一期第一次总结

热门文章

  1. oracle中OEM证书失效怎么办,安全证书过期怎么办 网站安全证书失效处理【解决方法】...
  2. 只会python怎么挣钱_业余学python有用吗
  3. h5页面保存img_一文彻底解决HTML5页面中长按保存图片功能
  4. 普通 项目打包包含第三方jar包
  5. java 1.5.0 gcj_CentOS安装JAVA后JAVA版本不对的问题
  6. python 函数递归一次增加一次变量_python函数局部变量、全局变量、递归知识点总结...
  7. mongodb 监控权限_运维监控产品分析篇
  8. linux服务器之间文件复制命令
  9. vue koa2即时聊天,实时推送比特币价格,爬取电影网站
  10. python之pyqt5-第一个pyqt5程序-图像压缩工具(2.0版本)-小记