Java面试题-Java基础

12 篇文章 0 订阅

Java基础学习

一.Java概述

Java是一门面向对象的语言,不仅吸收了c++语言的各种优点,还摒弃了c++的多继承,指针等概念

1. JDK,JRE,JVM的区别

JDK:Java标准开发包,包括JRE和Java开发工具
JRE:Java运行环境,包括JVM和Java核心类库
JVM:Java虚拟机

2.Java语言的特点

入门难,后期容易
面向对象
支持多线程
跨平台性

3.什么是跨平台性,原理是什么

跨平台性值得是一次编译到处运行,就比如说,我们写一段Java代码,不管是在windows上还是Linux上都能运行,只要对应的操作系统提供了相应的JVM,因为Java程序会被编译成字节码文件,而字节码是运行在虚拟机上的,所以这就是Java的跨平台性

4.什么是字节码,采用字节码的好处是什么

字节码就是.class文件,是由Java文件编译后得到,字节码文件只依赖于虚拟机,是在虚拟机上执行的.

5.Java数据类型(8大基本数据类型,引用数据类型)

基本数据类型:byte short int long float double boolean char
引用数据类型:类 接口 数组

类型类型名称关键字占用内存取值范围变量默认值
整型字节型byte1字节-128-1270
整型短整型short2字节-32768-327670
整型整型int4字节-231-231-10
整型长整型long8字节-263-263-10L
浮点型单精度浮点型float4字节-3.403E38-3.403E380.0F
浮点型双精度浮点型double8字节-1.798E308-1.798E3080.0D
布尔型布尔型boolean1字节true/falsefalse
字符型字符型char2字节表示一个字符(‘a’)‘\u0000’

6.switch都能作用在什么上

byte short int char String(jdk1.5) 枚举(jdk1.7)

7.最有效的方法计算2乘以8

2<<3

8.Math.round(11.5) (-11.5)

12 -11

9.float f = 3.4是否正确,为啥

不正确,因为3.4默认为double类型的,要想转化成float类型的话就需要强转float f = (float)3.4或者float f = 3.4f

10.short s1 = 1;s1 = s1+1

错误的,因为byte short char 运算结果默认为int类型,所以不能把int类型直接赋值给short类型

11.s1 += 1

正确,因为+=操作内部默认强转了

12.Java语言用什么编码方式,有什么特点

unicode
每一个字符都具有一个对应的unicode值,在任何语言都不冲突

13.访问修饰符4种

private:只能在本类中访问
default:在同一个包内能访问
protected:在同一个包或者不同包的子类中能访问
public:在全局都能访问

14.&和&&的区别

&&:假如前面的表达式为false就不执行后面的了直接返回false,前面的表达式为true,才会执行后面的表达式,如果后面的表达式为false,返回false,如果后面的表达式返回ture,结果返回true
&:无论前面的表达式结果如何,都要执行后面的表达式

15.Java关键字和保留字

关键字就是已经被java内部使用了的,比如class public等
保留字就是暂时还没使用,以后可能用得到,比如true false等

16.final,finally,finallize的区别

final:表示最终的,修饰的类不能被继承,修饰的方法不能被重写,修饰的变量就成为了常量
finally:通常和try-catch同步使用,finally里面的语句一定会被执行,通常用来关闭一些资源
finallize:它就是Jvm垃圾回收的最后一道防线,当我们执行system.gc()的时候,底层会调用finallize()来判断是否真的要回收垃圾

17.this 和 super

this:代表当前对象,可以调用当前类的方法,还可以在构造方法中使用,来区别形参和本类参数,还可以通过this()来调用本类额的构造方法
super:指代父类的资源,可以使用super.父类的属性或方法来进行调用,还可以使用super()来调用父类的构造,不过子类的构造函数里面已经默认调用了父类的构造函数

18.static

所谓static见名知意,静态的
被static修饰的变量成为静态变量,修饰的方法成为静态方法,代码块是静态代码块,他们都是在类加载的时候就被加载,并且全局只被加载一次,static存在的意义就是为了减少多次没必要的执行耗费资源,比如说创建数据库连接池一次就可以,就可以放到static代码块里面执行一次就好,还有就是在static方法中可以直接通过方法名引用静态方法,但是不能直接引用非静态方法,只能通过new一个对象,然后通过对象调用…

19.流程控制(break,continue,return)

break:结束循环
continue:结束当前的循环,进行下一次循环
return:结束方法

20.面向对象三大特性分别说一下

封装:封装指的是把一些属性都放到一个类中,私有化,对外只暴露方法getset,供外界调用
继承:继承就是子类继承父类,通过extends关键字,可以重写父类的方法,添加自己的特性
多态:多态指的就是编译时的类型和运行时的类型不同,就比如Person p = new Student();
编译时的类型是Person,运行时的类型是Student

21.面向对象五大基本原则

1.开闭原则:对扩展开放,对修改关闭

2.职责单一原则

3.里式替换原则:就是子类可以代替父类去一些需要父类的场景

4.依赖倒置原则:高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象

5.接口分离原则

22.抽象类和接口的区别

抽象类用abstract修饰,接口用interface修饰
抽象类和接口都不能实例化
抽象类里面可以有抽象的方法和普通的方法
接口里可以有抽象的方法和默认的方法(java8新特性)
抽象类是用来被继承的,接口是用来被实现的
抽象类里面可以有构造方法,接口中不能有构造方法

23.普通类和抽象类的区别

普通类可以被实例化,抽象类不能被实例化
普通类里面不能有抽象方法,但是抽象类里面可以有普通的方法

24.成员变量和局部变量的区别

成员变量声明在类的内部方法外部,局部变量声明在方法的内部
成员变量随着类的创建而创建,放在堆中,局部变量是随着方法的调用而创建,放在栈中
成员变量等到这个对象被回收时才销毁,局部变量调用完这个方法就出栈
成员变量可以不赋值有默认值,局部变量必须赋值,么有默认值

25.无参构造的作用

可以初始化子类,当一个类继承另一个类的时候,就有了父子关系,子类初始化首先要调用父类的构造方法,如果此时父类只有有参数的构造方法而没有无参构造,那么子类只能调用父类的有参构造,如果子类没写出来父类的有参构造,就会报错

26.静态变量和实例变量的区别

静态变量随着类的加载而加载,实例变量随着对象的创间而创建,
静态变量全局只被加载一次,实例变量对象创建几次就会创建几次
静态变量可以通过类名.属性名调用,实例变量通过对象名.属性名

27.静态方法与实例方法的区别

静态方法也被称为类方法,在类加载的时候就被加载,并且全局只加载一次
实例方法是对象创建就被加载
静态方法可以直接通过类名.方法名来调用
实例方法只能是通过对象名.方法名来调用
在静态方法中调用实例方法只能先实例化,在调用
因为静态方法是优先于实例方法加载的,有了静态方法之后还不一定存在实例方法

28.内部类有几种(4,分别介绍)

静态内部类:声明为static的内部类
局部内部类:在方法中的类
匿名内部类:没有名字的内部类
成员内部类:普通的内部类

29.重写和重载(解释全)

重写必要条件就是继承,子类重写父类的方法,可以添加自己的特性,方法名相同,参数列表相同,返回值不能比父类的返回值范围更小,权限修饰符不能大于父类,不能抛出比父类更大的异常

重载就是发生在同一个类中的,方法名相同,参数列表不同,其他的无所谓

30.==和equals区别

== 比较两个基本数据类型的大小是否相等,或者比较两个引用类型的地址是否相等
equals:在没有被重写之前和 ==是一样的,重写之后就是比较两个引用类型的内容是否相等

31.hashcode和equals

hashcode相同时equals不一定为true,因为存在hash冲突

32.Java的IO流分为几种

按照流向分可以分为输入流和输出流
按照单元分可以分为字节流和字符流
按照角色分可以分为节点流和处理流

33.BIO,NIO,AIO区别

简答:
BIO:就是我们平时说的IO同步阻塞IO,并发能力低
NIO:BIO的升级,同步非阻塞IO,客户端和服务器通过通道通讯,实现了多路复用
AIO:NIO的升级,异步非阻塞IO,更厉害了

34.Files的方法

exists():判断文件存在否
createFile():创建文件
delete():删除
copy():复制
move():移动
write():写
read():读

35.说说反射和反射获取的三种方式

反射就是只程序在运行中动态的获取一个类中的所有属性和方法
优点:非常的灵活
缺点:效率低,因为操作JVM告诉JVM要执行哪些指令,比普通的java代码效率低
场景:
通过反射加载数据库的驱动程序Class.forName()
反射是框架设计的灵魂,比如Spring通过XML配置模式装载bean的过程:
将程序中的所有xml或properties文件载入内存中,Java类里面解析XML或properties里面的内容,得到对应实体类的字节码以及相关的属性信息,然后通过反射机制,动态配置实例的属性

36.常量池是什么

常量池存在于堆中,是为了方便存取,避免重复创建,创建字符串时候,JVM首先会去常量池中寻找,对于一些已有的字符串,直接在常量池中取出,而不需要在创建新的

37.String特点

不可变,因为底层使用了final修饰了一个char类型的数组

38.String类的常用方法有哪些

length():字符串长度
indexOf();返回指定字符的索引
equals():比较两个字符串是否相等
replace():替换
subString();截取

39.为什么HashMap的key使用String

因为String是不可变的,HashMap的Key是唯一的,所以使用String类型作为key就减少了不必要的HashCode比对,就提高了性能

40.String,StringBuffer,StringBuilder的区别

String是不可变的,StringBuffer和StringBuilder是可变的
StringBuffer是线程安全的,因为底层每个方法都加了Synchronized,效率会低一些
StringBuilder是线程不安全的,相对效率会高一些
总的来说String的效率最低其次StringBuffer最后StringBuilder
根据合适的场景来选择使用哪一个,如果多线程并发下,无疑使用StringBuffer如果单线程追求效率无疑StringBuilder
但是通常我们还是使用String

41.自动装箱和自动拆箱

自动装箱:基本数据类型转换为包装类
自动拆箱:包装类转化为基本数据类型

42.Integer i = 127 和Integer a = 127相等吗

相等,范围是-128~127之间都相等

6、Java源程序在转换为机器语言执行过程中既有编译也有解释。 ( ) 7、// 是java的多行注释符。 ( ) 面向对象 3.Java 仅支持类间的单重继承。 ( ) 17.方法可以没有返回值,或有一个返回值,也可以有多个返回值。( ) 5.一个类的定义包括定义类头和定义类体两个部分。( ) 7.类的私有属性和私有方法可以被其子类访问。( ) 13.子类不能继承父类的构造函数。( ) 14.重载的方法可以通过它们的返回值类型的不同来区分。( ) 16.在 Applet 的坐标系中,(0,0) 代表输出窗口左上角的象素点。( ) 18.构造函数的方法名可由编程人员任意命名。( ) 19.构造函数能继承,也能被重载。( ) 20.类的构造函数名必须和类名相同。( ) 1、Java中所有的类都是java.lang.Object类的直接或间接子类。 ( ) 5、只有抽象类或接口中才能包含抽象方法。 ( ) 9、两个类同在一个包中,那么在一个类可以访问另一个类的private成员变量。 ( ) 10、方法形式参数的作用域是该方法的方法体。 ( ) 8、两个类同在一个包中,那么在一个类可以访问另一个类的private成员变量。( ) 10、方法形式参数的作用域是该方法的方法体。 ( ) 1、String abc[ ];是合法的Java语句。 ( ) 2、在Java里,允许多重继承。 ( ) 3、在Java语言里,do-while语句是先执行循环体,然后再判断的循环条件。 ( ) 4、只有抽象类或接口中才能包含抽象方法。       ( ) 其他 8、StringBuffer类的对象包含的字符串不可以被修改。 ( ) 8.字符串 ”\’a\’” 的长度是5。( ) 9.Java 支持多线程机制。( ) 填空题 17.Java中的的字符使用( )编码unicode 18. 在Java语言中,将源代码翻译成____________时产生的错误称为编译错误,而将程序在运行中产生的错误称为运行错误。字节码 13. Java语言中的浮点型数据根据数据存储长度和数值精度的不同,进一步分为哪两种具体类型,各占二进制的多少位? 16.字符串 ”\’a\’” 的长度是( )3 13. float 32位、double 64位 24.表达式2*5/2.5、1.0/2*5、1/2*3、5/3的计算结果分别是_________。 25.当整型变量n的值不能被13除尽时,其值为 false 的Java语言表达式是_______ 。 26.执行以下程序段后:x = ________, y = ________ 。 int x = 5, y=5; y = ++x * - -y; 29. 关系运算的运算结果应是( )类型 30. 逻辑运算的运算对象应是( )类型,运算结果应是( )类型 33.下面的语句是声明一个逻辑变量并赋值,请将它补充完整: ______ b1=5!=6; 逻辑变量b1的值是______。 34.下面的语句是声明某类型变量s,并通过三目条件运算符的结果给变量s赋值,请将该语句补充完整,s的初值是什么? ______ s=(9999%2= =1) ? ”奇数” : ”偶数”; 24. 4.0; 2.5; 0; 1 25. (n%13= =0 26. 6 ;24 29. boolean型30. boolean型;boolean型 31. 略 33. boolean true 34. String ”奇数” 18.阅读下面的程序段,回答问题。 if ( x < 5 ) System.out.print(" one "); else { if ( y < 5 ) System.out.print(" two "); else System.out.println(" three "); } 问题: 1)若执行前 x=6, y=8,该程序段输出是什么? 2)若执行前 x=1, y=8,该程序段输出是什么? 18. 1)three 2)one 25.下面是一个java应用程序(Application),它的功能是在屏幕上输出26个小写英文字母,其中每个字母相隔一个制表符,请完成程序填空。 public _____ Class1 { public static void main( String args[] ) { char c='a'; for (int i=1;i<=26;i++) { System.out.print(______); } } } 26.下面是一个java应用程序(Application),它的功能是计算 s=1+2+3+...+10 ,请完成程序填空。 public _____ Class1 { public static void main( String args[] ) { int s=0; for (int i=1;i<=10;i++) { s+=______; } System.out.println("s="+s); } } 27.下面是一个java Application 的主类的定义,其功能是输出乘法口诀表第一列,请完成程序填空。 import java.io.*; public class MyClass { public static void main(String[] args) { int j=1; for(int i=1; _______; i++) { System.out.println(i+"*"+j+"="+_______); } } } 25. class (c++)+"\t" 26. class i 27. i<=9 j*i 1.结构化程序设计的三种基本流程控制结构是:_______、_______、________。 10.下面程序的功能是求2 到100 之间的素数,请将程序补充完整。 public class Class1 { public static void main( String args[] ) { Label1: for(int i=2;i<100;i++) { for(int j=2;j<i;j++) { if( i%j==_____) _________; } System.out.print(i+"\t"); } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT二叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值