您现在的位置是:首页 > 原理深入 > Java面试总结Java面试总结

Java面试总结(基础)

第十三双眼睛2019-01-11【Java面试总结】人已围观

简介Java面试总结(基础)

1一个java源文件中是否可以包含多个类(不是内部类),如果可以,有什么限制?
一个java源文件中可以有多个类,但是只能由一个被public修饰的类,而且此类的类名必须跟文件名一致

2java中有没有goto
java抄袭至c/c++,goto是java中的保留字,java不用,程序员也不能用

3说说单与(&)和双与(&&)的区别
单与和双与都是逻辑运算符,表示逻辑与(and),当运算符两边的表达式都为true时,整个表达式的结果才时true,只要其中一个表达式的结果时false,整个表达式的结果就是false,区别是,单与具有短路的功能,如果第一个表达式的结果为true,才会进行第二个表达式的运算,如果第一个表达式的结果是false,则就不会进行第二个表达式的运算了。当单与两边的表达式不是布尔表达式的时候,单与表示位运算符,

4java中如何跳出循环
如果想跳过本次循环,则用continue,如果想跳出本层循环,则用break,如果想跳出外层循环,则可以在外层循环定义一个标号,使用break 标号跳出外层循环,也可以使外层循环受里层循环的影响,如定义一个变量,在想要跳出外层循环的时候,改变这个变量,顺便跳出内层循环,这时,就会判断外层循环的循环条件,在外层循环的判断条件里加上定义的这个变量,即可影响到外层循环,跳出外层循环。

5switch能不能作用在byte上,能不能作用在int上,能不能作用在long上,能不能作用在String上
在switch(exp)表达式中,exp必须为一个整数表达式或者一个枚举常量,整数表达式可以时基本类型,也可以时包装类型,由于byte,short,int 都可以转换为int,所以,他们时可以的,long和String不行,但是在jdk1.7后,支持String了。

6short s1=1 ; s1=s1+1;有错吗,有错的话,错在哪里?short s1=1; s1+=1;有错吗,有错的话,错在哪里?
s1=s1+1;由于s1是短整型,1常量,默认是int型,相加之后的结果会进行自动类型提升,成为int型,再赋值给short型会报错,类型转换错误。
s1+=1;是java语言规定的预算符,会做特殊处理,不会报错,编译能正常通过。

7char类型变量中能不能存储一个中文字符,为什么?
char类型变量是用来存储unicode编码的,unicode编码中是有汉字的,所以,char类型变量是可以存储汉字的,如果某个汉字没有被unicode编码集包含,char类型变量就不能存储该汉字,补充,char类型变量占用两个字节。

8用最有效率的方法算出2*8等于几
最有效的方法是用位运算符2<<3,因为一个数左移几位就相当于乘以2的几次方,cpu是支持位运算的,不必进行内存操作,所以这种方式是最快的。

9使用final修饰一个变量时,是引用不能变,还是引用的对象不能变
当用final修饰一个变量时,是引用不能变,引用的对象是可以变的

10==和equals方法有啥区别
==比较的是变量里存放的值是否相等,equals比较的是变量引用的对象是否相同

11静态变量和实例变量有啥区别
在语法定义上的区别,静态变量要在前面加static关键字,而实例变量不能加
在程序运行时的区别,实例变量是属于某个对象的变量,只有这个对象被创建出来了,该变量才能被分配空间,才能初始化,才能使用,而静态变量不属于某个对象,而是属于某个类的所有对象的,在类加载的过程中,就会分配空间,就会初始化,就能使用。

12是否可以在static方法内部对非static方法进行调用
不可以,static方法在类加载的过程结束后,就已经存在于内存空间中了,而非static方法在类加载完成后,并没有存在于内存中,所以,是不能的。只有创建了对象,才能对非static方法进行调用

13Integer与int的区别
int是java提供的8种基本类型之一,Integer是java为int类型提供的包装类,int 值默认为0,Integer默认为null,Integer可以区分有没有进行赋值的情况,而int不行,如在考试过程中,考生没有参加考试,成绩为0,参加了考试,成绩也可以为0,此时用int就不知道哪些学生考试成绩为0,哪些考生没有考试。而Integer就可以区分,没有参加过考试的学生成绩是Null,参加过考试的学生成绩是0。Integer中还定义了整数的最大值和最小值常量。

14Math.round(11.5)等于多少,Math.round(-11.5)等于多少
Math类中提供了3个与取整有关的方法,分别是ceil(),floor(),round(),这些方法与他们的中文含义相对应,如,ceil中文意思是天花板,人站在地面上,天花板在人的上面,所以,ceil方法向上取整,floor的中文意思是地板,人站在地上,地板在人的下面,所以,floor向下取整,round方法是在原来的基础上加0.5,再向下取整,所以,Math.round(11.5)的结果是12,Math.round(-11.5)的结果是-11.

15请说出public private protected的区别,以及啥也不写时的含义。
如果元素前没有写任何修饰符,则表示default
作用域         当前类        同一package        子孙类        其他package
public         V                 V                          V                  V
protected    V                V                           V                 X
default       V                  V                          X                X   
private        V                 X                           X                X

16说说override和overload的区别
override时覆盖的意思,是夫类的方法无法满足子类的需要时进行的。存在于夫类和子类之间,存在的基础是继承,子类中的方法和父类中的方法函数名,访问修饰符相等或者更宽,且不能抛出比父类更多的异常,overload意思是重载,是在一个类中的,方法名相同,参数表不同,重载是为了使程序员编程效率提高,不需要记过多的方法名称而设置的。

17构造器是否可以被覆盖
构造器是为了为了创建对象使用,覆盖是发生在父类和子类之间的事情,构造器的覆盖没有任何意义,所以,构造器不能被覆盖,但是可以被重载。

18接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承具体类?抽象类中是否可以有静态的main方法
接口可以继承接口,并且是多继承,继承后,将继承到原来的抽象方法,抽象类也可以实现接口,抽象类可以继承具体类,抽象类中可以有具体的main方法

19写clone方法时,通常都有一行代码,是什么
clone方法有缺省行为,super.clone();因为首先要把父类中的成员复制过来,然后在复制子类中的成员。

20面向对象的特征有哪些方面
计算机软件系统是现实生活中的映射。面向对象主要有封装,继承,多态,抽象4个基本特征
封装保证了软件内部优良的模块性,封装的目的就是实现软件高内聚,低耦合,防止程序改动时的相互影响,在面向对象的语言中,对象是封装的基本单位,面向对象的封装就是把一个对象的特征和行为封装在一个模块中,也就是一个类,特征就是属性,行为就是方法。
抽象就是找出事物的相似性,根据这些相似性,将他们归为一个类,其中相似分为两个方面,特征相似,行为相似。
继承就是在定义一个新的类的时候,可以在一个已经定义好的类的基础上来进行,将已经定义好的类的内容包括进来,并且还可以加入一些新的内容,也可以重写父类中的方法,来满足子类的需要,继承是子类共享夫类属性和方法的机制,提高了软件的重用性和扩展性。
多态是指在程序中定义的变量指向的具体类型和所调用的具体方法在编程时不确定,在运行时才能确定。这样,不用修改程序代码,就可以让引用变量绑定到不同的实现类上,使得该引用调用的方法随之改变,使程序运行可以呈现多种状态,这就是多态,多态增强了软件的扩展性和灵活性。

21java中实现多态的机制是什么
靠的是父类或者接口的引用指向子类或者是具体实现类的方法。

22abstract类和interface有什么区别
被abstract修饰的类是抽象类,不能创建对象,含有被abstract修饰的方法的类必须为抽象类,abstract类中的方法不必是抽象的,如果子类没有实现父类中的所有的抽象方法,那么子类必须是抽象的。
接口是特殊的抽象类,接口中所有的方法都是抽象的,所有的属性都是public static final的
两者的语法区别:
抽象类可以有构造方法,接口不能有构造方法
抽象类中可以有普通的成员变量,接口中是公开静态常量
抽象类中的方法可以不必全是抽象的,但是接口中的方法必须全是抽象的
抽象类中可以有静态方法,接口中不可以
抽象类中的静态成员变量的访问类型是任意的,但是接口中的只能是public static final
一个类可以实现多个接口,但是只能继承一个抽象类
两者的应用区别:
接口更多的是在系统架构设计时发挥作用,主要用于定义模块之间的通信契约,而抽象类主要在代码实现方面起作用,比如代码的重用性,模板方法设计模式是抽象类的典型应用,比如某个项目用servlet开发,要在所有的servlet中判断用户的权限,那么就可以定义一个抽象的基类,在基类的service中实现对权限的判断。

23抽象的方法是否可以同时是静态的?是否可以同时是本地方法?是否可以同时是同步方法?
抽象方法不可以同时是静态的,因为抽象方法是要给子类实现的,而静态方法是类的方法。
抽象的方法不可以同时是本地的,因为本地方法是要用于依赖平台的语言去实现的,实现时,就是写出于其他语言对应的方法,而不用写什么代码,但是,需要在前面声明native
抽象的方法不可以同时是同步的,因为抽象的方法不能有实现体,而同步方法没有实现体没有意义。

24JAVA虚拟机运行原理
JAVA虚拟机就是在编译器和操作操作系统之间引入的一个虚拟的机器,针对不同的操作系统,有不同的虚拟机。编译器只需要面向虚拟机,编译出虚拟机能够识别的指令,即字节码,不同平台的虚拟机将相同的字节码解释为不同的机器指令,由机器进行执行,这也是为什么JAVA有跨平台的特性

25简单介绍一下线程
线程是进程中一个单一顺序的运行流程,一个进程中可以有多个线程,多个线程可以并发执行,每个线程执行不同的任务
线程有以下状态:
1创建状态:线程对象创建出来后,还没有调用start方法时被称为创建状态
2就绪状态:线程对象调用了start方法后,进入了就绪状态,此时,线程对象可以参与调度,获得cpu资源。
3运行状态:线程对象获得了cpu资源,进入了运行状态,执行run方法
4阻塞状态:线程对象失去了cpu资源,但是还没有运行完,就进入了阻塞状态,调用wait,suspend方法也可以进入阻塞状态.
5死亡状态:线程对象执行完run方法里面的代码,或者是调用stop或者destory方法,失去了cpu资源,就进入了死亡状态
为了解决线程死锁的问题,给每个线程定义一个优先级,优先级是一个整数,1-10,默认是5,cpu尽量将资源先让给优先级高的线程,但是不能保证高优先级线程先执行
创建线程的方法:
1实现runable接口,实现里面的run方法,创建Thread对象时,将创建的Runnable对象作为参数传进去
2继承Thread类,重写里面的run方法

26java8新特性
java8支持许多新特新,以下是主要的几个:
lambda表达式:允许将函数做为一个参数
方法引用:方法引用可以引用类或者对象的方法或构造方法,
默认方法:默认方法就是在接口口中有了一个实现的方法
optional类:用来解决空指针异常







 

Tags:

很赞哦! ()

上一篇:返回列表

下一篇:Web阶段

文章评论

    共有条评论来说两句吧...

    用户名:

    验证码:

本站推荐

站点信息

  • 网站名称:JavaStudy
  • 建站时间:2019-1-14
  • 网站程序:帝国CMS7.5
  • 文章统计64篇文章
  • 标签管理标签云
  • 统计数据百度统计
  • 微信公众号:扫描二维码,关注我们