JAVA面试题第一阶段

您所在的位置:网站首页 java运算符号的优先级由高到低排列 JAVA面试题第一阶段

JAVA面试题第一阶段

2023-03-12 01:26| 来源: 网络整理| 查看: 265

1.1 简述static和final的用法?

static:修饰属性,方法,代码块

(1)静态属性:也可叫类变量 类名.属性名 来访问

(共有的类变量与对象无关,只和类有关)

注意:类中的实例变量是在创建对象时被初始化的,被static修饰的属性,也就是类变量,是在类加载时被创建并进行初始化,类加载的过程是进行一次。也就是类变量只会被创建一次。

(2)静态方法:类名.方法名 直接访问

注意:static修饰的方法,不能直接访问本类中的非静态(static)成员(包括方法和属性)

本类的非静态方法可以访问本类的静态成员(包括方法和属性),可以调用静态方法。

修饰变量,方法,类

final:修饰变量,类,方法

(1)修饰变量

被fianl修饰的成员变量就是常量(常量名大写),一旦赋值不能改变

修饰局部变量:修饰基本数据类型 -> 变量的值不能改变

修饰引用 -> 引用只能指向固定的对象

修饰实例变量:默认值不生效,可以再赋值

(2)修饰方法 :不能被子类覆盖

(3)修饰类:不能被继承

在一个final类中的所有方法,默认都是final的

注意:final,不能用来修饰构造方法。

1.2 写出冒泡排序的算法

for(int i=0;i1.13 String、StringBuffer和StringBuilder的区别?

1. 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String

2. 再来说线程安全

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

String:适用于少量的字符串操作的情况

StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

1.14 讲一下线程的几种实现方式?

extends Thread implements Runnable implements Callable

Runnable和Callable的区别是, (1)Callable规定的方法是call(),Runnable规定的方法是run()。 (2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得 (3)call方法可以抛出异常,run方法不可以 (4)运行Callable任务可以拿到一个Future对象,表示异步计算的结果。

1.15 讲一下线程的几种启动方式?

.第一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法,然后在run方法里填写相应的逻辑代码。

第二种方法是实现Runnable接口,并编写run方法,相比继承Thread类创建线程的好处是以实现接口的方式创建线程可以对类进行更好的扩展,该类可以继承其他类来扩展自身需求,相比第一种方式更加灵活,扩展性强。

实现Callable接口创建线程与Runnable接口的不同之处在于:如果你想要在线程执行完毕之后得到带有返回值的线程则实现Callable接口

1.16 有没有使用过线程并发库?

在java5之后,就有了线程池的功能了,在介绍线程池之前,先来简单看一下线程池的概念。假设我开了家咨询公司,那么每天会有很多人过来咨询问题,如果我一个个接待的话,必然有很多人要排队,这样效率就很差,我想解决这个问题,现在我雇几个客服,来了一个咨询的,我就分配一个客服去接待他,再来一个,我再分配个客服去接待……如果第一个客服接待完了,我就让她接待下一个咨询者,这样我雇的这些客服可以循环利用。这些客服就好比不同的线程,那么装这些线程的容器就称为线程池。

1.17 静态变量和实例变量的区别?

静态变量也叫类变量,这种变量前加了static修饰符。可以直接用类名调用,也可以用对象调用,而且所有对象的同一个类变量 都是共享同一块内存空间。

实例变量也叫对象变量,这种变量没有加static修饰符。只能通过对象调用, 而且所有对象的同一个实例变量是共享不同的内存空间的。

区别在于:

静态变量是所有对象共有的,某一个对象将它的值改变了,其他对象再去获取它的值,得到的是改变后的值;

实例变量则是每一个对象私有的,某一个对象将它的值改变了,不影响其他对象取值的结果,其他对象仍会得到实例变量一开始就被赋予的值。

1.18 try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

会执行 try{}中的return执行后在没有返回数据时先去执行finally{}中的代码,然后再返回。所以说finally{}在return中间执行

1.19 同步和异步有何异同,在什么情况下分别使用他们?举例说明。

如果数据将在线程间共享.例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取.

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率.

1.20 java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承, 请说出他们分别是哪些类?

Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来的.

1.21 &和&&的区别?

&和&&都可以用作逻辑运算符,表示逻辑与。当运算符两边的表达式都为true时,结果才为true;否则,结果为false。

另外&&还具有短路功能,也就是说,当&&左边的表达式结果为false时,将不再运算&&右边的表达式,结果肯定为false。例如,对于if(str!=null&&!str.equals(“”)),当str为null时,不会对&&右边的表达式进行运算,否则会出现空指针异常。

&还可以用作位运算符,当&两边的表达式不是boolean类型时,&表示按位与。

1.22 数组有没有length()这个方法? String有没有length()这个方法?

数组中没有length()这个方法,但是数组中有length这个属性。用来表示数组的长度。

String中有length()这个方法。用来得到字符串的长度。

1.23 构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。

Constructor不能被继承,所以Constructor也就不能被override。每一个类必须有自己的构造函数,负责构造自己这部分的构造。子类不会覆盖父类的构造函数,相反必须负责在一开始调用父类的构造函数。

1.24 构造器如何工作?

Java在构造实例时的顺序是这样的:

1、分配对象空间,并将对象中成员初始化为0或者空,java不允许用户操纵一个不定值的对象。   

2、执行属性值的显式初始化   

3、执行构造器   

4、将变量关联到堆中的对象上

1.25 super与this的区别?

不同点: 1、super()主要是对父类构造函数的调用,this()是对重载构造函数的调用 2、super()主要是在继承了父类的子类的构造函数中使用,是在不同类中的使用;this()主要是在同一类的不同构造函数中的使用 相同点: 1、super()和this()都必须在构造函数的第一行进行调用,否则就是错误的

1.26 GC是什么? 为什么要有GC?

GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,

忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,

Java语言没有提供释放已分配内存的显示操作方法。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc()或Runtime.getRuntime().gc(),但JVM可以屏蔽掉显示的垃圾回收调用。

垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低优先级的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。

在Java诞生初期,垃圾回收是Java最大的亮点之一,因为服务器端的编程需要有效的防止内存泄露问题,然而时过境迁,如今Java的垃圾回收机制已经成为被诟病的东西。移动智能终端用户通常觉得iOS的系统比Android系统有更好的用户体验,其中一个深层次的原因就在于Android系统中垃圾回收的不可预知性。

1.27 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类可继承实体类,但前提是实体类必须有明确的构造函数

1.28 内部类可以引用他包含类的成员吗?有没有什么限制?

完全可以。如果不是静态内部类,那没有什么限制! 如果你把静态嵌套类当作内部类的一种特例,那在这种情况下不可以访问外部类的普通成员变量,而只能访问外部类中的静态成员

1.29 Java有没有goto?答:goto 是Java中的保留字,在目前版本的Java中没有使用。(根据James Gosling(Java之父)编写的《The Java Programming Language》一书的附录中给出了一个Java关键字列表,其中有goto和const,但是这两个是目前无法使用的关键字,因此有些地方将其称之为保留字,其实保留字这个词应该有更广泛的意义,因为熟悉C语言的程序员都知道,在系统类库中使用过的有特殊意义的单词或单词的组合都被视为保留字)1.30 解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法

答:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、”hello”和常量都是放在静态区中。栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用。

1.31 用最有效率的方法计算2乘以8?

答: 2



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3