Java基础概念.docx
- 文档编号:18554963
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:36
- 大小:33.98KB
Java基础概念.docx
《Java基础概念.docx》由会员分享,可在线阅读,更多相关《Java基础概念.docx(36页珍藏版)》请在冰点文库上搜索。
Java基础概念
Java基础概念(全面)
一、 基本知识
1. JDK和JRE的区别
答:
JDK是Java语言开发工具包,包含JRE和开发工具(javac.exe等);JRE是java语言的运行环境,包含JVM和核心类库;JVM是java虚拟机,保证了java的跨平台性。
2. JVM跨平台吗?
答:
JVM不具有跨平台性,不同的操作系统所对应的JVM不一样。
正是因为JVM的不跨平台,才能够使java语言具有跨平台性。
3. 保留字是什么?
答:
保留字是还未使用的关键字,可能在java以后的版本中使用。
有goto和const。
4. java语言的特点?
答:
完全面向对象,跨平台性,开源,简单易学,安全可靠,高性能,分布式处理,多线程,健壮性,多态。
5. main是关键字吗?
答:
不是的。
main是主函数的名字,能够被虚拟机识别,是程序执行的入口。
6. path和classpath的区别?
答:
path环境变量配置的是可执行文件.exe的执行路径;能够在不同盘符下访问path路径下的可执行文件。
Classpath配置的java语言编译后生成的字节码文件的执行路径。
7. 计算机最基本的存储单位是:
字节(byte)
计算机能直接识别的进制是:
二进制
8进行运算的时,变量和常量有什么区别?
答:
变量在运算过程中的值是变化的,可以被多次赋值。
常量则是固定的。
9标识符的组成?
以及命名规则?
答:
标识符有26个字母的大小写,0到9,_和$组成。
命名规则:
不能使用关键字,不能数字开头,严格区分大小写,要见名知义。
函数名和变量名如果是多个单词组成,第一个单词的首字母小写,其余首字母大写。
类名和接口名如果是多个单词组成,首字母全部大写。
包名全部小写。
常量名全部大写,如果是多个单词,用_隔开。
10.变量数据类型分为哪几种?
如何使用变量?
答:
基本数据类型:
整形:
包括byte、short、int、long。
浮点型:
包括float、doble。
字符型;char;布尔型:
boolean。
引用数据类型:
数组、类、接口,枚举。
变量需要先定义,再赋值,才能使用。
11.常量分为哪几种?
答:
自定义常量和字面值常量。
自定义常量是我们自己通过final修饰定义的常量。
字面值常量包括整数、小数、布尔、字符、字符串。
12.byte的范围多少?
char的范围多少?
答:
byte范围-128到127 。
char范围0到65535.
13. ASCII码表中 字符 '0' , 'a' , 'A' 分别对应int类型的值是多少.
答:
0在表中对应的值是48,a对应的是97;A对应的是65.
14. long是8个字节,float是4个字节,为什么long 比 float小?
答:
底层采用的运算规则不一样。
15. 以取值范围的大小排列数据的基本类型.
答:
double>float>long>int>char>short>byte
16.+=、-=、这些运算符内隐含了强制类型转换。
17.++和—的使用?
答:
单独使用的时候,在前在后都一样。
参与运算的时候,在前是先自加或者自减,然后再用这个结果参与运算。
在后是先参与运算,再进行自加或者自减。
18. 逻辑或 " | " 和 短路或 " || "有什么区别?
答:
|不管前面的结果是真是假后面的都会运算,||前面为真后面的不参与运算。
但是结果是一样的。
19. 逻辑与 " & " 和 短路与 " && " 由什么区别?
答:
&不管前面的结果是真是假后面的都会运算,&&前面为假后面的不参与运算。
但是结果是一样的。
20.Math.round原理是什么?
答:
先加0.5,然后再取floor值。
21.生成随机数的方法?
答:
第一种:
Random类中的方法;第二种Math.random()方法,生成的是0.0和1.0范围直接的小数。
22.if…else..和三元表达的区别
答:
能用三元表达式写的就能用if语句写,但是能用if语句写的,三元表达式不一定能写。
三元表达式必须要有一个结果。
23.while、do while 、for的区别?
答:
do while语句是先性后判断,while和for先判断后执行。
for循环结束后,其中定义的初始化条件不能再使用。
24.if和switch区别?
答:
if1.对具体的值进行判断。
2.对区间判断。
3.对运算结果是boolean类型的表达式进行判断。
switch:
1.对具体的值进行判断。
2.值的个数通常是固定的
25. switch语句的表达式可以放什么?
答:
byte、short、int、char。
JDK1.5以后可以使用枚举,1.7之后可以使用String。
26. 死循环的两种写法.
答:
while(true) 和 for(;;)
27. break和continue的区别
答:
break是完全跳出循环,不再执行循环体的代码。
也可以用在switch语句中。
Continue是提前结束本次循环,进入下次循环。
Return是结束方法。
28.switch中break可以省略吗?
default可以省略吗?
答:
break在最后一个可以省略,其他的不要省略。
Default可以省略。
29:
方法重载和方法重写的区别?
答:
方法重载是在同一个类中出现同名方法,参数列表不同,与返回值类型无关。
方法重写是在子父类间,子类出现和父类声明完全相同的方法时,就成为方法重写。
重写要求返回值必须相同或者有子父类关系。
父类私有的方法,子类不能重写,因为子类压根就不能继承 子类重写父类方法时,权限不能更低,最好一致。
30.方法的注意事项:
答:
要明确方法的返回值类型,明确方法的参数列表。
31.方法的调用?
答:
有返回值时可以单独调用,但是没有意义;也可以放在输出语句中;可以赋值给变量。
无返回值直接调用即可。
32.数组的定义格式?
答:
int[] arr =new int[5];int arr[]= new int[5];
int[] arr = new int[]{1,5,6,7,…} int[] arr = {23,6,8,9…}
二维数组
String[][] arr = new String[3][];
Syso(arr[0]) 打印的结果是null。
33.数组的默认值?
答;整形的默认值是0,引用数据类型是null;boolean型的是false。
34.栈内存和堆内存?
答:
栈内存用于存储局部变量和代码的执行,堆内存中都是new出来的。
35.数组和集合的区别:
(1)长度区别:
数组长度是固定的;集合长度可变。
(2)存储内容:
一个数组只能存储同一种数据类型的元素;集合可以存储不同数据类型的元素。
(3)数据类型:
数组能够存储基本数据类型,也能够存储引用数据类型;集合只能存储引用数组类型。
36.数组和集合的转换?
答:
数组转为集合:
Arrays.asList(数组),转为集合后不能添加、删除元素。
但是可以修改元素。
把基本类型的数组转为集合,把这个数组作为对象存入集合中。
集合转为数组:
list.toArray().
二、面向对象
37.局部变量和成员变量的区别:
(1)定义位置不同:
成员变量定义在类中方法外,局部变量定义在方法内。
(2)作用范围不同:
成员变量在整个类中有效,局部变量在所在的方法有效。
(3)内存位置不同:
成员变量随着对象的创建存放在堆内存中,局部变量存放在栈内存中。
(4)初始化值不同:
成员变量是有默认的初始化的值的;局部变量不赋值不能用。
(5)生命周期不同:
成员变量随着对象的存在而存在,随着对象的消失而消失;局部变量随着方法的调用而存在,方法调用完毕而消失。
38.变量的使用顺序?
答:
就近原则。
先在局部找,局部找不到在本类中找,本类找不到就去父类找,找不到就编译失败。
39.类和对象的关系?
答:
类是具有相同或相似一类事物的抽象;对象是类的实例化。
40.java描述事物最基本的单位?
答:
类
41.什么叫面向对象?
答:
面向对象是一种思想,它是基于面向过程的,强调的是具备功能的对象,让对象调用方法解决问题。
在开发中,要完成特定的功能就去寻找相应的对象,如果找不到就创建对象,使用对象,维护完善对象。
自己举例说明:
厨师做饭,女朋友洗衣服。
。
。
。
。
思想特点:
1.让复杂的事情简单化;2,更符合人类的思维需求;3.角色从执行者到指挥者。
三大特征:
封装,继承,多态。
42.什么是封装?
封装的原则?
好处?
答:
封装就是把不需要对外暴露的状态信息隐藏在对象内部,不允许外部程序直接访问对象的信息,而是通过该类对外提供公共的访问方式对其访问和操作。
原则:
(1)将不需要对外暴露的信息隐藏;
(2)对外提供公共的访问方式。
好处:
将变化隔离;提高了安全性;便于使用,提高了重用性。
43.封装就是私有,对吗?
为什么?
答:
private是封装的一种体现形式。
方法也是封装。
44. Java中参数传递的问题:
答:
如果是基本数据类型,传递的参数要和形参的类型一致;如果是引用数据类型,那么传递的参数类型和形参的一致,或者是他的子类。
45. 构造方法,set方法都可以给成员变量赋值,这两种赋值方式有什么区别?
答:
构造方法主要作用是用来给对象初始化,赋值只是他的兼职工作,也可以不用赋值。
Set方法只能用来赋值,在原有对象的基础上赋值。
46. static关键字的特点?
注意事项是什么?
有什么好处和弊端?
答:
(1)被static修饰的变量和方法随着类的加载而加载
(2)优于对象存在(3)能够被类名直接调用(4)资源共享。
注意事项:
静态方法中不可以定义this、super关键字,因为静态优先于对象存在,静态只能覆盖静态。
好处:
static能够被类名直接调用,定义的是对象的共性内容,不用每个对象单独定义,节省空间。
弊端:
生命周期过长。
47.类变量和实例变量的区别?
答:
(1)所属不同:
类变量属于类,是对象的共性内容;实例变量属于对象,是特性内容。
(2)存储位置不同:
类变量随着类的加载存储于方法区;实例变量随着对象的创建存储于堆内存中。
(3)生命周期不同:
类变量随着类的加载而存在,随着类的消失而消失;实例变量随着对象的存在而存在,随着对象的消失而消失。
(4)调用方式不同:
类变量能够被类名直接调用,有对象的时候也能被对象调用;实例变量只能被对象调用。
48. 构造方法能不能重载?
答:
可以,在同一个类中,参数列表不同,与返回值无关。
49.静态代码块和构造代码块的区别?
答:
(1)静态代码块属于类,给类进行初始化,类一加载就会执行,只执行一次,经常用于加载驱动。
(2)构造代码块给对象进行统一初始化,每创建一次就会执行一次。
50.什么是继承?
答:
当多个类中有很多共性的内容时,我们可以把这些共性内容抽取出来封装成一个类,让这些类与这个封装的类产生关系。
这种关系就是继承。
51.继承的的特点和好处,弊端?
答:
特点:
java只支持单继承,但是能够多层次继承;接口能够单继承,也能够多继承。
好处:
( 1)提高了代码的复用性
(2)提高了代码的维护性(3)提高了代码的扩展性。
(4)让类与类产生了关系,是多态的前提。
弊端:
增强了类与类的耦合性。
52.this和super 的区别?
答:
this代表对象的引用,super代表当前对象父类的引用。
53.Super()和this()在构造方法能同时使用吗?
答 :
不能,super调用的是父类的构造,要放在构造函数的第一行;this调用的是本类的构造,也要放在第一行。
Super关键字和this关键字能否在构造函数中共存?
答:
能。
54.为什么每个构造函数中第一行都有默认的super()?
用于子类对象访问父类前,对父类数据进行初始化。
55.为什么默认的super()都是空参的呢?
因为Object类是所有 类的父类,Object中只有一个空参构造。
56.构造方法的特点?
答:
(1)方法名和类名相同
(2)没有返回值,连viod都没有。
(3)不用写return,可以有return;
57.this的作用?
答:
(1)区别局部变量和成员变量
(2)代表本类对象的引用(3)也可以用于构造方法的调用。
58.子父类都有静态代码块,构造代码块,构造方法的执行顺序?
答:
父类的静态代码块先执行,再执行子类中的静态代码块;接着执行父类的构造代码块和父类的构造方法,最后执行子类的构造代码块和构造方法。
59. final修饰的变量的初始化时机:
答:
a.未被static关键字修饰
* 可以显示初始化
* 可以在构造方法中初始化
b.被static修饰
* 可以显示初始化
* 可以在静态代码块中初始化
* 不能在构造方法中初始化
60. final如果修饰局部变量,会发生什么事情?
答:
基本类型,是值不能被改变,引用类型,是地址值不能被改变,对象中的属性可以改变。
61. 什么是多态?
多态的体现,前提,好处和弊端分别是什么?
答:
同一事物在不同时刻表现出来的不同状态。
体现:
父类引用指向子类对象,父类引用作为参数可以接收其子类对象,接口引用作为参数可以接收其实现类对象。
前提:
(1)类与类之间要有关系,要么继承,要么实现
(2)要有方法重写(3)父类或者接口引用指向子类对象。
好处:
(1)提高了代码的维护性
(2)提高了代码的扩展性,父类引用指向子类对象
弊端:
父类引用只能调用父类的方法,不能调用子类特有的方法和属性。
*向上转型:
父类或者父接口指向子类对象。
*向下转型:
把那个引用强制转为子类对象。
62.多态中成员方法和变量的特点?
答:
(1)一般方法:
编译看左边,运行看右边。
(2)静态方法:
编译看左边,运行看左边。
(3)变量:
编译看左边,运行看左边。
63.抽象类和抽象方法的特点,有什么关系?
答:
抽象类不能创建对象,需要子类继承;抽象方法没有方法体,需要子类去实现。
抽象类不一定含有抽象方法,抽象方法一定在抽象类中。
一个抽象类如果没有抽象方法,可不可以定义为抽象类?
如果可以,有什么意义?
* 可以
* 这么做目的只有一个,就是不让其他类创建本类对象,交给子类完成
64.抽象类中的抽象方法和非抽象方法的区别?
答:
抽象方法要求子类必须重写,完成相应的功能;非抽象方法让子类继承,提高代码的复用性。
65.abstract不能和哪些关键字共同存在?
答:
private:
私有的方法是不可见的,无法被复写
final:
被final修饰的方法是最终方法,无法被复写
static:
被static修饰的方法,要随类加载到方法区,由于抽象方法没有方法体所以不能加载
66.final修饰的变量、方法、和类有什么特点?
答:
final修饰的变量只能赋值一次,不能发生改变,如果修饰的基本类型,是其值不能发生改变,如果修饰的引用数据类型,是地址值不能发生改变;final修饰的方法不能被重写;final修饰的类不能被继承,也称最终类。
67.final、finally、finalized的区别?
答:
(1)final是一个关键字,是用来修饰类,成员变量,成员方法的,
它修饰的类不能被继承,但是可以继承其他类,
它修饰的成员变量是一个常量,只能赋值一次
它修饰的成员方法不能被子类重写
(2)finally是 try-catch-finally语句的一个模块,正常情况下里边的代码永远会执行,一般是用来释放资源的
(3)finalize是Object类中的方法,当对象变成垃圾的时候,由GC(Java中的垃圾回收机制)来调用该类的finalize()方法回收垃圾。
68.接口中的成员的特点?
答:
都是常量,public static final ;方法都是抽象方法,public abstract;没有构造方法。
69、类与类、类与接口、接口与接口的关系?
答:
类只能单继承类,但是能够多层次继承;类实现接口,能同时实现多个接口,能在继承类的同时实现接口;接口可以单继承接口,也能多继承。
70.接口和抽象类的区别?
(1)成员的特点:
抽象类可以有变量、常量、构造方法、一般方法、抽象方法;接口有且只能有常量和抽象方法。
(2)关系特点:
类与类支持单继承,不能多继承,但是能够多层次继承,类与接口是实现关系,一个类能实现多个接口,一个类继承类一个类的同时能实现多个接口;接口与接口之间能单继承,也能多继承;
(3)设计理念:
抽象类定义的是该继承体系的共性功能,是is a的关系。
接口定义的是该体系的拓展功能,是like a的关系。
71.接口的思想特点?
(1)对外暴露的规则
(2)接口是程序对外的功能拓展(3)接口是用来多实现的(4)接口的出现降低了类与类之间的耦合性。
72.什么是内部类,特点是什么?
答:
在类中定义的类就是内部类。
特点
(1)能够直接访问所在类的成员,包括私有的。
(2)外部类访问内部类需要创建内部类的对象。
73.成员内部类是什么?
答:
成员内部类是定义在成员位置的类。
能够被私有、静态修饰。
74.内部类的方法如果访问局部变量,内部类的成员变量,外部类的成员变量?
答:
局部变量可以直接访问;内部类的成员变量this. ;外部类的成员变量:
外部类名.this.
75.局部内部类访问的局部变量为什么要用final修饰?
答:
因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用。
但是JDK1.8以后取消了这个特性,会默认加上final的。
76.什么是匿名内部类?
答:
匿名内部类就是没有名字的内部类,是内部类的简化形式。
匿名内部类必须继承或实现一个接口,在使用的时候直接用父类的名字创建一个子类对象并实现其中的方法,匿名内部类的实质是一个继承了该类或者实现该接口的匿名的子类对象。
前提:
必须继承一个类或实现一个接口。
规则:
(1)不能是抽象的,因为它的本质是一个子类对象。
(2)不能定义构造方法,因为没有类名。
使用:
(1)当接口中的只有一个抽象方法时,并对方法调用一次的时候
(2)传递参数的时候,如果参数是接口或抽象类,其实需要的就是实现类对象或者子类对象,这个时候使用匿名内部类。
77、匿名对象何时使用?
答:
(1)当对对象方法调用一次的时候
(2)可以作为实际参数进行传递。
78适配器模式?
当一个接口有多个抽象方法时,而我们只使用其中的一个或两个方法时,每次使用的时候我们都要重写这些方法,比较麻烦。
我们可以定义一个类去实现这个接口,并重写里面的方法,只是方法体为空,并把这个类定义为抽象类,我们使用的时候继承这个类重写需要的方法就就可以了。
79.四种权限修饰符的比较?
答:
public的权限最大,同一类中,同一个包中,不同包中(子类),不同包中(无关类)都可以访问。
给大家使用
Protected同一类中,同一个包中,不同包中(子类),可以访问。
强调的是子类
默认 同一类中,同一个包中 可以访问。
强调的是同一个包
Private 同一类中访问。
强调的是自己
80.package在第一行,只能有一个;然后是import导包;最后是class。
81.代码块的分类:
局部代码块:
让变量尽早的消失,节约资源,提高效率。
构造代码块:
用于给对象初始化;
静态代码块儿:
给类进行初始化,用于加载驱动。
同步代码块:
为了防止CPU高速切换出现安全问题。
三、API
81.==和equals的区别?
答:
“==”是比较运算符,既能比较基本数据类型,又能比较引用数据类型。
基本数据类型比较的是数值,引用数据类型比较的是地址值。
equals是一个方法,只能比较引用数据类型。
所有的类都会继承Object的equals方法。
重写equals方法比较的是对象的内容,如果没有重写将调研Object的equals方法,比较的是地址值。
82.String str = null 和String str = “”的区别?
答:
String str = null只是声明了引用,但是没有创建对象,没有为其开辟空间,不能操作方法。
String = “”是创建了一个长度为0的字符串,并在内存中分配了空间。
83.String s1= “abc”, String s2= new String(“abc”),s1==s2结果是什么?
s1.equals(s2)结果是什么?
答:
s1==s2结果为false。
s1指向的常量池中的对象,s2指向的是堆内存中的对象,两者的地址值不同。
s1.equals(s2)结果是true。
String重写了equals方法,比较的是内容。
84.String,StringBuffer、StringBuilder的区别?
答:
String是一个特殊的引用数据类型,是一个长度不可变的字符序列,没有缓冲区,一旦创建就不会发生变化了。
即使重新赋值不是在原来对象的基础上改变的,而是创建了一个新的对象,将引用指向这个新的对象,浪费空间,效率比较低。
StringBuffer、StringBuilder是容器,是可变的字符串序列。
StringBuffer是JDK1.0版本的,线程是安全的,效率比较低。
StringBuilder是JDK1.5出现的,线程不安全,效率高。
85.StringBuilder的底层是什么?
答:
底层是字符数组,原始长度为16。
通过append添加元素的时候,会自动扩容,扩容规则:
大字符串的长度= 小数组长度*2+2.
86.为什么出现基本数据类型包装类?
答:
将基本数据类型封装为对象的好处能在对象中封装更多的功能操作数据。
87.String 和int直接的转换?
答:
将int类型转为String类型的方法:
(1)基本数据类型+“”
(2)Integer.toString(int num)(3)String.valueOf(int i)
将String转为int:
Integer.parseInt(String s)
89.Object类中的常见方法有哪些?
答:
hashCode():
返回值是int,是该对象的哈希玛值。
equals():
返回值是boolean,比较的是地址值。
toString():
返回该对象的字符串表现形式。
getClass():
返回值类型是Class。
返回的是创建该对象所属类对应的字节码文件。
这些方法都需要对象调用,在开发的过程中要重写。
地址值的组成:
类名@十六进制的哈希值。
90.获取当前时间毫秒值有哪几种方式?
答:
(1)new Date().getTime();
(2)System. currentTimeMillis()(3)Cale
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 基础 概念