1.什么是JDK?什么是JRE?
JDK:java development kit:java开发工具包,是开发人员所需要安装的环境
JRE:java runtime environment:java运行环境,java程序运行所需要安装的环境
2.什么是OOP?
面向对象编程
世间万物都可以看成一个对象。每个物体包括动态的行为和静态的属性,这些就构成了一个对象。
java是面向对象的语言,c是面向过程的语言
3.类与对象的关系?
类是对象的抽象,对象是类的具体,类是对象的模板,对象是类的实例
4.Java中有几种数据类型
整形:byte,short,int,long
浮点型:float,double
字符型:char
布尔型:boolean
5.什么是拆装箱?
拆箱:把包装类型转成基本数据类型
装箱:把基本数据类型转成包装类型
6.Java中的包装类都是那些?
byte:Byte
short:Short
int:Integer
long:Long
float:Float
double:Double
char:Character
boolean:Boolean
7.int和Integer的区别
区别:
Integer是int的包装类;int是基本数据类型;
Integer的默认值是null;int的默认值是0。
9.一个java类中包含那些内容?
属性、方法、内部类、构造方法、代码块。
10.例如: if(a+1.0=4.0),这样做好吗?那针对浮点型数据运算出现的误差的问题,你怎么解决?
不好,因为计算机在浮点型数据运算的时候,会有误差,尽量在布尔表达式中不使用浮点型数据(if,while,switch中判断条件不使用浮点型)
使用Bigdecimal类进行浮点型数据的运算
11.++i与i++的区别
++i:先赋值,后计算
i++:先计算,后赋值
12.Java中各种数据默认值
Byte,short,int,long默认是都是0
Boolean默认值是false
Char类型的默认值是’’
Float与double类型的默认是0.0
对象类型的默认值是null
13.Object类常用方法有那些?
Equals
Hashcode
toString
wait
notify
clone
getClass
14.java中有没有指针?
有指针,但是隐藏了,开发人员无法直接操作指针,由jvm来操作指针
15.java中是值传递引用传递?
理论上说,java都是引用传递,对于基本数据类型,传递是值的副本,而不是值本身。对于对象类型,传递是对象的引用,当在一个方法操作操作参数的时候,其实操作的是引用所指向的对象。
16.假设把实例化的数组的变量当成方法参数,当方法执行的时候改变了数组内的元素,那么在方法外,数组元素有发生改变吗?
改变了,因为传递是对象的引用,操作的是引用所指向的对象
17.实例化数组后,能不能改变数组长度呢?
不能,数组一旦实例化,它的长度就是固定的
18.形参与实参
形参:全称为“形式参数”,是在定义方法名和方法体的时候使用的参数,用于接收调用该方法时传入的实际值;实参:全称为“实际参数”,是在调用方法时传递给该方法的实际值。
19.构造方法能不能显式调用?
不能构造方法当成普通方法调用,只有在创建对象的时候它才会被系统调用
20.构造方法能不能重写?能不能重载?
可以重写,也可以重载
21.什么是方法重载?
方法的重载就是在同一个类中允许同时存在一个以上的同名方法,只要它们的参数个数或者类型不同即可。在这种情况下,该方法就叫被重载了,这个过程称为方法的重载(override)
22.内部类与静态内部类的区别?
静态内部类相对与外部类是独立存在的,在静态内部类中无法直接访问外部类中变量、方法。如果要访问的话,必须要new一个外部类的对象,使用new出来的对象来访问。但是可以直接访问静态的变量、调用静态的方法;
普通内部类作为外部类一个成员而存在,在普通内部类中可以直接访问外部类属性,调用外部类的方法。
如果外部类要访问内部类的属性或者调用内部类的方法,必须要创建一个内部类的对象,使用该对象访问属性或者调用方法。
如果其他的类要访问普通内部类的属性或者调用普通内部类的方法,必须要在外部类中创建一个普通内部类的对象作为一个属性,外同类可以通过该属性调用普通内部类的方法或者访问普通内部类的属性
如果其他的类要访问静态内部类的属性或者调用静态内部类的方法,直接创建一个静态内部类对象即可。
23.Static关键字有什么作用?
Static可以修饰内部类、方法、变量、代码块
Static修饰的类是静态内部类
Static修饰的方法是静态方法,表示该方法属于当前类的,而不属于某个对象的,静态方法也不能被重写,可以直接使用类名来调用。在static方法中不能使用this或者super关键字。
Static修饰变量是静态变量或者叫类变量,静态变量被所有实例所共享,不会依赖于对象。静态变量在内存中只有一份拷贝,在JVM加载类的时候,只为静态分配一次内存。
Static修饰的代码块叫静态代码块,通常用来做程序优化的。静态代码块中的代码在整个类加载的时候只会执行一次。静态代码块可以有多个,如果有多个,按照先后顺序依次执行。
24.Final在java中的作用
Final可以修饰类,修饰方法,修饰变量。
修饰的类叫最终类。该类不能被继承。
修饰的方法不能被重写。
修饰的变量叫常量,常量必须初始化,一旦初始化后,常量的值不能发生改变。
25.Java中操作字符串使用哪个类?
String,StringBuffer,StringBuilder
26.StringBuffer,Stringbuilder有什么区别?
StringBuffer是线程安全的,Stringbuilder是非线程安全的。所以Stringbuilder比stringbuffer效率更高,StringBuffer的方法大多都加了synchronized关键字
27.String str=”aaa”,与String str=new String(“aaa”)一样吗?
不一样的。因为内存分配的方式不一样。
第一种,创建的”aaa”是常量,jvm都将其分配在常量池中。
第二种创建的是一个对象,jvm将其值分配在堆内存中。
28.String str=”aa”,String s=”bb”,String aa=aa+s;一种创建了几个对象?
一共有两个引用,三个对象。因为”aa”与”bb”都是常量,常量的值不能改变,当执行字符串拼接时候,会创建一个新的常量是” aabbb”,有将其存到常量池中。
29.String类的常用方法有那些?
charAt:返回指定索引处的字符
indexOf():返回指定字符的索引
replace():字符串替换
trim():去除字符串两端空白
split():分割字符串,返回一个分割后的字符串数组
getBytes():返回字符串的byte类型数组
length():返回字符串长度
toLowerCase():将字符串转成小写字母
toUpperCase():将字符串转成大写字符
substring():截取字符串
format():格式化字符串
equals():字符串比较
30.判断两个对象是否相同,能使用equlas比较吗?
不能。Equlas大多用来做字符串比较,要判断基本数据类型或者对象类型,需要使用==
31.==与equlas有什么区别?
==可以判断基本数据类型值是否相等,也可以判断两个对象指向的内存地址是否相同,也就是说判断两个对象是否是同一个对象,Equlas通常用来做字符串比较。
32.如何将字符串反转?
Stringbuilder或者stringbuffer的reverse方法
33.如何将数组反转?
Collections的reverse方法
34.面向对象的语言有那些特征?
封装、继承、多态
35.Java中的继承是单继承还是多继承
Java中既有单继承,又有多继承。对于java类来说只能有一个父类,对于接口来说可以同时继承多个接口
36.如果父类只有有参构造方法,那么子类必须要重写父类的构造方法吗?
必须重写
37.创建一个子类对象的时候,那么父类的构造方法会执行吗?
会执行。当创建一个子类对象,调用子类构造方法的时候,子类构造方法会默认调用父类的构造方法。
38.当父类引用指向子类对象的时候,子类重写了父类方法和属性,那么当访问属性的时候,访问是谁的属性?调用方法时,调用的是谁的方法?
子类重写了父类方法和属性,访问的是父类的属性,调用的是子类的方法
39.Super与this表示什么?
Super表示当前类的父类对象
This表示当前类的对象
40.抽象的关键字是什么?
Abstract
41.抽象类必须要有抽象方法吗
不是必须。抽象类可以没有抽象方法。
42.如果一个类中有抽象方法,那么这个一定是抽象类?
包含抽象方法的类一定是抽象类
43.抽象类可以使用final修饰吗?
不可以。定义抽象类就是让其他继承的,而final修饰类表示该类不能被继承,与抽象类的理念违背了
44.普通类与抽象类有什么区别?
普通类不能包含抽象方法,抽象类可以包含抽象方法
抽象类不能直接实例化,普通类可以直接实例化
45.什么是接口?
接口就是某个事物对外提供的一些功能的声明,是一种特殊的java类
46.JAVA为什么需要接口?
接口弥补了java单继承的缺点
47.接口有什么特点?
接口中声明全是public static final修饰的常量
接口中所有方法都是抽象方法
接口是没有构造方法的
接口也不能直接实例化
接口可以多继承
48.接口与抽象类有什么区别?
抽象类有构造方法,接口没有构造方法
抽象类只能单继承,接口可以多继承
抽象类可以有普通方法,接口中的所有方法都是抽象方法
接口的属性都是public static final修饰的,而抽象的不是
49.Java中异常分为哪两种?
编译时异常
运行时异常
50.说几个常见的编译时异常类?
NullPointerException:空指针异常
ArrayIndexOutOfBoundsException:数组下标越界
NumberFormatException:数字转换异常
IllegalArgumentException:参数不匹配异常
51.异常的处理机制有几种?
异常捕捉:try…catch…finally,异常抛出:throws。
52.在异常捕捉时,如果发生异常,那么try.catch.finally块外的return语句会执行吗?
会执行,如果有finally,在finally之后被执行,如果没有finally,在catch之后被执行
53.Try.catch.finally是必须要存在的吗?
Try块必须存在,catch和finally可以不存在,但不能同时不存在
54.除了使用new创建对象之外,还可以用什么方法创建对象?
Java反射
55.Java反射创建对象效率高还是通过new创建对象的效率高?
通过new创建对象的效率比较高。通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低
56.Java中数据结构有哪些?
数组、list、map、set
获取数组或者链表长度:数组有length属性,list有size()方法
57.数组与list区别是什么?
数组在内存中地址是连续的,list是不连续的
数组大小不可变,list可变
数组查找效率高,增删效率低;list相反
57.ArrayList与LinkedList有什么区别?
ArrayList与LinkedList都实现了List接口。
ArrayList是线性表,底层是使用数组实现的,它在尾端插入和访问数据时效率较高,
Linked是双向链表,他在中间插入或者头部插入时效率较高,在访问数据时效率较低
58.Map有什么特点
以键值对存储数据
元素存储循序是无须的
不允许出现重复键
59.HashMap的原理是什么?
底层是用数组+链表实现。如下图。
综合数组和链表的特性,做出一种寻址容易,插入删除也容易的数据结构哈希表
60.常用io类有那些?
File
FileInputSteam,FileOutputStream
BufferInputStream,BufferedOutputSream
FileReader,FileWriter
BufferReader,BufferedWriter
61.final、finalize()、finally
性质不同
final为关键字;
finalize()为方法;
finally为区块标志,用于try语句中;
作用
final为用于标识常量的关键字,final标识的关键字存储在常量池中(在这里final常量的具体用法将在下面进行介绍);
finalize()方法在Object中进行了定义,用于在对象“消失”时,由JVM进行调用用于对对象进行垃圾回收,类似于C++中的析构函数;用户自定义时,用于释放对象占用的资源(比如进行I/0操作);
finally{}用于标识代码块,与try{}进行配合,不论try中的代码执行完或没有执行完(这里指有异常),该代码块之中的程序必定会进行;
62.线程同步的方法
wait():让线程等待。将线程存储到一个线程池中。
notify():唤醒被等待的线程。通常都唤醒线程池中的第一个。让被唤醒的线程处于临时阻塞状态。
notifyAll(): 唤醒所有的等待线程。将线程池中的所有线程都唤醒。
63.线程与进程的区别
进程是系统进行资源分配和调度的一个独立单位,线程是CPU调度和分派的基本单位
进程和线程的关系:
一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
资源分配给进程,同一进程的所有线程共享该进程的所有资源。
线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
线程是指进程内的一个执行单元,也是进程内的可调度实体。
线程与进程的区别:
调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。
并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。
拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。
系统开销:在创建或撤销进程的时候,由于系统都要为之分配和回收资源,导致系统的明显大于创建或撤销线程时的开销。但进程有独立的地址空间,进程崩溃后,在保护模式下不会对其他的进程产生影响,而线程只是一个进程中的不同的执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但是在进程切换时,耗费的资源较大,效率要差些。
64.java设计模式有哪些?
有23种设计模式,如下:
单例模式:某个类只能有一个实例,提供一个全局的访问点。
简单工厂:一个工厂类根据传入的参量决定创建出那一种产品类的实例。
工厂方法:定义一个创建对象的接口,让子类决定实例化那个类。
抽象工厂:创建相关或依赖对象的家族,而无需明确指定具体类。
建造者模式:封装一个复杂对象的构建过程,并可以按步骤构造。
原型模式:通过复制现有的实例来创建新的实例。
适配器模式:将一个类的方法接口转换成客户希望的另外一个接口。
组合模式:将对象组合成树形结构以表示“”部分-整体“”的层次结构。
装饰模式:动态的给对象添加新的功能。
代理模式:为其他对象提供一个代理以便控制这个对象的访问。
亨元(蝇量)模式:通过共享技术来有效的支持大量细粒度的对象。
外观模式:对外提供一个统一的方法,来访问子系统中的一群接口。
桥接模式:将抽象部分和它的实现部分分离,使它们都可以独立的变化。
模板模式:定义一个算法结构,而将一些步骤延迟到子类实现。
解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器。
策略模式:定义一系列算法,把他们封装起来,并且使它们可以相互替换。
状态模式:允许一个对象在其对象内部状态改变时改变它的行为。
观察者模式:对象间的一对多的依赖关系。
备忘录模式:在不破坏封装的前提下,保持对象的内部状态。
中介者模式:用一个中介对象来封装一系列的对象交互。
命令模式:将命令请求封装为一个对象,使得可以用不同的请求来进行参数化。
访问者模式:在不改变数据结构的前提下,增加作用于一组对象元素的新功能。
责任链模式:将请求的发送者和接收者解耦,使的多个对象都有处理这个请求的机会。
迭代器模式:一种遍历访问聚合对象中各个元素的方法,不暴露该对象的内部结构。
了解:单例、工厂、观察者模式即可
65.常见的排序方式:冒泡排序、选择排序、快速排序
https://www.cnblogs.com/ll409546297/p/10956960.html