您当前的位置:网站首页>张丹峰,Java面试题—内部类和静态内部类的差异,滴滴

张丹峰,Java面试题—内部类和静态内部类的差异,滴滴

2019-04-10 09:26:18 投稿作者:admin 围观人数:177 评论人数:0次
Java面试题—内部类和静态内部类的差异

内部类和静态内部类的差异

内部类:

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

2、内部王子文的老公类实例化:B是A的内部类,实例化B:A.B张丹峰,Java面试题—内部类和静态内部类的差异,滴滴 b = new A().new B()。

3、内部类能够引证外部类的静态或许非静态特点及办法。

静态内部类:

1、静态内部类特点和办法能够声明为静态的或许张丹峰,Java面试题—内部类和静态内部类的差异,滴滴非静态的。

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

3、静态内部类只能引证外部类的静态的特点及办法。

inner classes——内部类

static nested classe拔智齿后注意事项s——静态嵌套类

其实人家不叫张丹峰,Java面试题—内部类和静态内部类的差异,滴滴静态内部类,仅仅叫习惯了,从字面就很简略理解了。

内部类魔芋是什么依托外部类的存在为条件,而静态嵌套类则能够彻底独立,理解了这点就很好理解了。

非静态内水月镜像部类中的变量和办法不能声明为静态的原因

静态类型的特点和办法,在类加载的时分就会存在于内存中。运用某个类的静态特点和办法张丹峰,Java面试题—内部类和静态内部类的差异,滴滴,那么这个类必需要加载到虚拟机中。但对错静态内部类并不随外部类一同加载,只要在实例化外部类之后才会加载。

咱们想象一个场景:在外部类并没有实例化,内部类还没有加载的时分假如调用内部类的静态成员或办法,内部类还没有加载,却企图在内存中创立该内部类的静态成员,就会发作抵触。所以非静态内部类不能有静态成员变量或静态办法。

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在编译时期,被优化为hellowo张丹峰,Java面试题—内部类和静态内部类的差异,滴滴rld,所以在运转时期,他们指向了同一个目标。咱们也能够推理,关于直接字符串的相加,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、re羊水指数move办法,因而在运用时存在问题。

能够这样:

String array[]= {"hello","world","java","zhiyin"};
List list = new ArrayList(Arrays.asList(array));

调集变数组:

String[] array=list.toArray(new String[list.size()]);

面向目标的特征有哪些方面?

笼统:笼统是将一类目标的一同特征总结出来结构类的进程,包含数据笼统和行为笼统两方面。笼统只重视目标有哪些特点和行贴身警卫为武警,并不重视这些行为的细节是什么。

承继:承继是从已有类得到承继信息创立新类的进程。供给承继信息的类被称为父类;得到承继信息的类被称为子类。承继让改动中的软件体系有了必定的延续性,一同承继也是封装程序中可变要素的重要手法。

封装:一般以为封装是把数据和操作数据的办法绑定起来,对数据的拜访只能经过已界说的接口。面向目标的实质便是将实际国际描绘成一系列彻底自治、关闭的目标。咱们在类中编写的办法便是对完结细节的一种封装;咱们编写一个类便是对数据和数据操作的封装。能够说,封装便是躲藏全部可躲藏的东西,只向外界供给最简略的编程接口。

多态性:多态性是指答应不同子类型的目标对同一音讯作出不同的呼应。简略的说便是用相同的目标引证调用相同的办法可是做了不同的作业。多态性分为编译时的多态性和运转时的多态性。办法重载完结的是编译时钢铁神拳的多态性,而办法重写完结的是运转时的多态性。

归纳的解说下线程的几种状况

1.安排妥当(Runnable):线程预备运转,不必定立马就能开端履行。

2.运转中(Running):进程正在履行线程的代码。

3.等候中(Waiting):线程处于堵塞的状况,等候外部的处理完毕。

4.睡觉中(Sleeping):线程被强制睡觉。

5.I/O堵塞(Blocked on I/O):等候I/O操作完结。

6.同步堵塞(Blocked on Synchronization):等候获取锁。

7.逝世(Dead):线程完结了履行。

Java调集类里边根本的接口有哪些

1.Collection:代表一组目标,每一个目标都是它的子元素。

2.Set:不包含重复元素的Collection。

3.List:有次序的collection,并且能够包含重复元素。

4.Map:能够把键(key)映射到值(value)的目标,键不能重复。

Iterator和ListIterator的差异

  • Iterator可用来遍历museSet和List调集,可是ListIterator只能用来遍历List。
  • Iterator对调集只能是前向遍历,ListIterator既能够前向遍历也能够后向遍历。
  • ListIterator完结了Iterator接口,并包含其他的功用,比方:添加、替换元素,获取前一个和后一个元素的索引等等。

Enumeration和Iterator的差异

  • java中的调集类都供给了回来Iterator的办法,便是迭代器,它和Enumeration(枚举)的首要差异其实便是Iterator能够删去元素,可是Enumration却不能。
  • 运用Iterator来遍历调集时,应运用Iterator的remove()办法来删去调集中的元素,运用调集的remove()办法将抛出ConcurrentModificationException反常。
  • Enumeration接口的功用和Itera阿sator接口的功用是重复的。此外,Iterator 接口添加了一个可选的移除操作,并运用较短的办法名。新的完结应该优先考虑运用Iterator接口而不是Enumeration接口。
  • Enumeration速度是Iterator的2倍,一同占用更少的内存。可是,Iterator远远比Enumeration安全,由于其他线程不能够修正正在被iterator遍历的调集里边的目标。

介绍一下HTTP的呼应结构

  • 恳求报文的组成:
  • 恳求办法。
  • 恳求的资源的URI。
  • 协议版别。
  • 可选的恳求首部字段。
  • 内容实体。

呼应报文的组成:

  • 协议版别。
  • 状况码。
  • 用于解说状况码的原因短语。
  • 可选的呼应首部字段。
  • 实体主体。

**呼应: **

  • 呼应码:回应客户端此次呼应是否成功。如:404(找不到恳求的资源),500(服务器内部过错),200(成功呼应)等。
  • 音讯头:服务器与客户端通讯的暗码,告诉客户端该怎样履行某些操作。
  • 呼应正文:传递服务器呼应给客四大美女户端要显现的内容,能够是下载文件或许显现界面。

final、finalize和finally各自的效果

  • final是一个润饰符,能够润饰变量、办法和类。假如 final 润饰变量,意味着该变量的值在初始化后不能被改动。
  • finalize办法是在目标被收回之前调用的办法,给目标自己最终一个复生的时机,可是什么时分调用 fi新式中二病nalize 没有确保。
  • finally是一个关键字,与try和catch一同用于反常的处理。finally块必定会被履行,不管在try块中是否有发作反常。

说一下你了解的几种进程间的通讯方法

管道pipe:管道是一种半双工的通讯张丹峰,Java面试题—内部类和静态内部类的差异,滴滴方法,数据只能单向活动,并且只能在具有亲缘联系的进程间运用。进程的亲缘联系一般是指父子进程联系。

高档管道popen:将另一个程序作为一个新的进程在当时程序进程中发动,则它算是当时程序的子进程,这种方法咱们成为高档管道方法。

有名管道named pipe :有名管道也是半双工的通讯方法,可是它答应无亲缘联系进程间的通讯。

音讯行列MessageQueue:音讯行列是由音讯的链表,存放在内核中并由音讯行列标识符标识。音讯行列克服了信号传递信息少、管道只能承载无格局字节约以及缓冲区巨细受限等缺陷。

同享存储SharedMemory:同享内存便是映射一段能被其他进程所拜访的内存,这段油电混合同享内存由一个进程创立,但多个进程都能够拜访。同享内存是最快的 IPC 方法,它是针对其他进程间通讯方法运转功率低而专门规划的。它往往与其他通讯机制,如信号两,合作运用,来完结进程间的同步和通讯。

信号量Semaphore:信号量是一个计数器,能够用来操控多个进程对同享资源的拜访。它常作为一种锁机制,避免某进程正在拜访同享资源时,其他进程也拜访该资源。因而,首要作为进程间以及同一进程内不同线程之间的同步手法。

套接字Socket:套解口也是一种进程间通讯机制,与其他通讯机制不同的是,它可用于不同及其间的进程通讯。

信号sinal: 信号是一种比较复杂的通讯方法,用于告诉接轿车电瓶寿数收进程某个工作现已发作。

最终针关于互联网公司java程序员涉及到的绝大部分难题我做成了文档和架构视频材料免费共享给我们(包含Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术材料),希望能协助到且找到一个好的作业,也节约我们在网上查找材料的时刻来学习,也能够重视我一下今后会有更多干货共享。

材料收取方法:

重视+转宾馆发后,私信关键词 【材料或许java张丹峰,Java面试题—内部类和静态内部类的差异,滴滴】免费获取!

重要的作业说三遍,转发、转发、转发后再发私信,才十大名表排行能够拿到!

the end
门厅不锈钢灰玻璃隔断,设计感十足的台式美学公寓