栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

复习Java基础知识(一)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

复习Java基础知识(一)

文章目录
    • 220101
      • 1. “一次编写,到处运行“?
      • 2. 一个Java文件里可以有多个类吗(不含内部类)?
      • 3.说一说你对Java访问权限的了解
      • 4. 介绍一下Java的数据类型
      • 5. int数据范围
      • 6. 全局变量、局部变量
      • 7. 实例变量默认值
      • 8. 为啥有包装类
      • 9. 自动装拆箱的应用场景
      • 10. 对Integer/Double如何判断相等
      • 11. int和Integer有什么区别,二者在做==运算时会得到什么结果?
      • 12. 面向对象是?
      • 13. 它的三大特征是?
      • 14. 封装是什么?为什么要有?
      • 15. 多态是什么?
    • 220102
      • 16. Java中的多态是怎么实现的?
      • 17. 为何只能单继承?
      • 18. 重写和重载的区别?
      • 19. 构造方法能否重写?
      • 20. Object类中的方法
      • 21. hashCode()和equals()的关系
      • 22. 为何要重写hashCode()和equals()
      • 23. ==和equals()有何区别
      • 24. String方法
      • 25. String能否被继承?
      • 26. String和StringBuffer区别?
      • 27. StringBuffer和StringBuilder区别?
      • 28. 创建字符串时,推荐new还是”“?
      • 29. 对字符串拼接的理解
      • 30. 字符串相加的底层如何实现
      • 31. String a = "abc"; ,说一下这个过程会创建什么,放在哪里?
      • 32. new String("abc") 是去了哪里,仅仅是在堆里面吗?
      • 33. 接口和抽象类有什么区别?
      • 34. 接口中可以有构造函数吗?
      • 35. 谈谈你对面向接口编程的理解
      • 36. 遇到过异常吗,如何处理
      • 37. 说一说Java的异常机制
      • 38. Java的异常接口
      • 39. finally是无条件执行吗?
      • 40. 在finally中return会发生什么?
      • 41. 对static关键字的理解
      • 42. static修饰的类能不能被继承
      • 43. static和final区别
      • 44. 对泛型的理解
      • 45. 泛型擦除是什么
      • 46. List和List有什么区别?
      • 47. Java反射机制
      • 48. Java反射在实际项目中有哪些应用场景?
      • 49. 说一说Java的四种引用方式

220101 1. “一次编写,到处运行“?

答:JVM(java虚拟机)是实现Java跨平台的关键,充当桥梁。不同平台需要安装不同JVM,无需改动Java程序。

2. 一个Java文件里可以有多个类吗(不含内部类)?

答:可以。只能有一个被public修饰的类,主类名必须与java文件名一致。

3.说一说你对Java访问权限的了解

答:对成员变量/成员方法:

private:该成员可以被该类内部成员访问;

default:该成员可以被该类内部成员访问,也可以被同一包下其他类的成员访问

protected:该成员可以被该类内部成员访问,也可以被同一包下其他类的成员访问,还可以被其子类访问

public:任意包下,任意类的成员进行访问。

对类:

default:同一包下其他类访问

public:任意包下任意类访问

4. 介绍一下Java的数据类型

答:基本数据类型:(前七种均可互相类型转换)

数据类型数据范围
byte1字节(8位) -27——27-1
short2字节(16位) -2^15—— 2 ^15-1
int4字节(32位) -2^31—— 2 ^31-1
long8字节(64位) -2^63—— 2 ^63-1x
-3.4*10^38 ~ 3.4*10^38。
double8字节(64位) -1.8*10^308 ~ 1.8*10^308。
char2字节(16位)u000 — ufff。
boolean不同JVM有不同实现机制

引用数据类型:(本质是指针)要了解引用及引用对象存放的位置。

数组、类、接口

5. int数据范围

答:4字节 32位 -231-231-1。

6. 全局变量、局部变量

答:变量分为局部变量和成员变量。

成员变量

在类内定义;有默认初始值;static修饰的成员变量叫类变量,存储于方法区,生命周期与类相同;未被static修饰的成员变量叫实例变量,存储与对象所在的堆内存,生命周期跟对象相同。

局部变量

在方法里定义;无默认初始值;存储与栈内存,作用范围结束,空间自动释放。

7. 实例变量默认值

答:

变量默认值
byte0
short0
int0
long0L
float0.0F
double0.0
char‘u0000’
booleanfalse
8. 为啥有包装类

答:Java是面对对象的语言,但8中基本数据类型不具备对象的特性,为了解决这个问题,Java为每个基本数据类型定义了一个对应的引用类型,就是包装类。

9. 自动装拆箱的应用场景

答:自动装箱:把一个基本类型的数据直接赋值给对应包装类型。

自动拆箱:把一个包装类型的数据直接赋值给对应基本类型。

例如:参数为包装类型,数据为基本类型,直接传入。

10. 对Integer/Double如何判断相等

答:无法比较。数据类型不同不能用==。转为char比较时,浮点数带小数点,整数不带。Compare to只能对相同类型进行比较。

11. int和Integer有什么区别,二者在做==运算时会得到什么结果?

答:一个基本数据类型,一个包装类。比较时直接拆箱,==返回true,否则返回false。

12. 面向对象是?

答:它的基本思想是使用类、对象、继承、封装、消息等基本概念进行程序设计。尽可能运用人类的自然思维方式,将事物抽象地表示为系统中的类,作为系统的基本构成单元,这使得软件系统的组件可以直接映像到客观世界,并保持客观世界中事物及其相互关系的本来面貌。

13. 它的三大特征是?

答:封装、继承、多态。封装指的是将对象的实现细节隐藏起来,然后通过一些公用方法来暴露该对象的功能;继承是面向对象实现软件复用的重要手段,当子类继承父类后,子类作为一种特殊的父类,将直接获得父类的属性和方法;多态指的是子类对象可以直接赋给父类变量,但运行时依然表现出子类的行为特征,这意味着同一个类型的对象在执行同一个方法时,可能表现出多种行为特征。

14. 封装是什么?为什么要有?

答:将对象的状态信息隐藏在对象内部,使得外部无法进行直接操作和修改。

可以实现以下目的:

  • 隐藏类的实现细节;
  • 让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对成员变量的不合理访问;
  • 可进行数据检查,从而有利于保证对象信息的完整性;
  • 便于修改,提高代码的可维护性。
15. 多态是什么?

答:即向上转型。Java允许把一个子类对象直接赋给一个父类引用变量,无须任何类型转换,由系统自动完成。

当把一个子类对象直接赋给父类引用变量时,例如 baseClass obj = new SubClass();,这个obj引用变量的编译时类型是baseClass,而运行时类型是SubClass,当运行时调用该引用变量的方法时,其方法行为总是表现出子类方法的行为特征,而不是父类方法的行为特征,这就可能出现:相同类型的变量、调用同一个方法时呈现出多种不同的行为特征,这就是多态。

220102 16. Java中的多态是怎么实现的?

答:将参数设为父类型,传参时可以传入父类型的某个字类型的实例,实现多态。

17. 为何只能单继承?

答:Java中一个类只能有一个直接父类,而不能直接继承多个父类,但可以有任意多个间接父类。因为若两个父类中包含相同的方法时,子类在调用该方法或重写该方法时就会迷惑。

18. 重写和重载的区别?

答:重写:子类重写父类允许访问的方法(除private、final、static外)。”两同两小一大“,方法名,参数必须相同;异常范围、返回值类型要小于等于父类方法;修饰符要大于等于父类方法。

重载:同一类中、父类子类间。方法名必须相同,其余可不同。

19. 构造方法能否重写?

答:不能,构造方法必须与类名相同。如若子类重写父类构造方法,则子类中会有与类命不同的构造方法,矛盾。

20. Object类中的方法

答:

方法名作用
Class getClass()返回该对象的类
boolean equals(Object obj)判断两个对象是否相等
int hashCode()返回hashCode值
String toString()返回字符串表示
21. hashCode()和equals()的关系

答:hashCode返回该对象的hashCode值,equals则是判断两对象是否相同。即hashCode相等,equals不一定为true;若equals若为true,hashCode一定相等。

22. 为何要重写hashCode()和equals()

答:默认的equals判断方法和我们实际需求往往不一致。hashCode通常与equals有联动关系,故需要一同重写。

23. ==和equals()有何区别

答:==

  • 基本数据类型: 判断值

  • 引用数据类型: 判断两个对象的内存地址是否相同

    equals

  • Object默认比较内存地址

  • 重写后根据用户需求

24. String方法

答:可以看看部分方法的源码

  • String[] split(String regex):以指定的规则将此字符串分割成数组;
  • String trim():删除字符串前导和后置的空格;
  • int indexOf(String str):返回子串在此字符串首次出现的索引;
  • int lastIndexOf(String str):返回子串在此字符串最后出现的索引;
  • boolean startsWith(String prefix):判断此字符串是否以指定的前缀开头;
  • boolean endsWith(String suffix):判断此字符串是否以指定的后缀结尾;
  • String toUpperCase():将此字符串中所有的字符大写;
  • String toLowerCase():将此字符串中所有的字符小写;
  • String replaceFirst(String regex, String replacement):用指定字符串替换第一个匹配的子串;
  • String replaceAll(String regex, String replacement):用指定字符串替换所有的匹配的子串。
25. String能否被继承?

答:不能,由final修饰,是个不变类。

26. String和StringBuffer区别?

答:String:不变类,一旦被创建,不可改变,直至被销毁。

StringBuffer:其对象代表一个字符序列可变的字符串,可使用toString转为String对象。

27. StringBuffer和StringBuilder区别?

答:其对象均代表一个字符序列可变的字符串,但StringBuffer是线程安全的,StringBuilder时非线程安全的,性能略高。

28. 创建字符串时,推荐new还是”“?

答:”“创建时,JVM会用常量池来管理这个字符串;new会创建对象,JVM会先使用常量池来管理直接量,再调用String类的构造器来创建一个新的String对象,新创建的String对象被保存在堆内存中。

29. 对字符串拼接的理解

答:‘+’适用于两者均为直接量、StringBuilder适用于字符串包含变量且不要求线程安全、String Buffer适用于字符串包含变量且要求线程安全、String.concat适用于包含变量的2个字符串拼接。

30. 字符串相加的底层如何实现

答:若为直接量,则编译器会直接优化为一个完整的字符串。若包含变量,则编译器会使用StringBuilder进行优化,自动创建StringBuilder实例并调用append方法。

31. String a = “abc”; ,说一下这个过程会创建什么,放在哪里?

答:JVM使用常量池管理字符串直接量。执行过程:西安检查常量池中是否已经存在”abc“,若没有则存入常量池;若有,则复用,引用赋值给变量a。

32. new String(“abc”) 是去了哪里,仅仅是在堆里面吗?

答:先将abc存入常量池,再创建String对象,保存在堆内存里,然后堆中对象数据再指向常量池中直接量。

33. 接口和抽象类有什么区别?

答:接口是一种规范,规定能够调用哪些服务,该如何调用。抽象类体现了一种模板式设计,可以作为多个子类的抽象子类。

接口中只能包含抽象方法、静态方法、默认方法和私有方法,只能定义静态变量,不能定义普通成员变量,不包含构造器,不包含初始化块,可以实现多继承,即一个类可以直接实现多个接口。抽象类可以包含普通法,可以定义静态变量、普通成员变量,可以包含构造器、初始化块。

二者均无法被实例化,只能被实现和继承。他们都可以包含抽象方法,而其子类都必须实现这些抽象方法。

34. 接口中可以有构造函数吗?

答:不可以。 参看33

35. 谈谈你对面向接口编程的理解

答:可以降低耦合,提高系统可扩展性和可维护性。

36. 遇到过异常吗,如何处理

答:捕获异常(try catch)、处理异常、回收资源

37. 说一说Java的异常机制

答:处理异常的语句有try、catch、finally。try负责包裹业务代码,catch负责捕获和处理异常,finally用于回收资源。

当出现异常,系统会创建一个异常对象,由JVM需寻找可以处理该异常的catch块,并将异常对象交由它处理。除此之外,还可以使用throw主动抛出异常,交由JVM处理。而异常机制会逐层向外传递,直到main方法,则JVM终止程序,打印异常跟踪栈的信息。

38. Java的异常接口

答:Throwable是顶层父类,直接子类分别是Error、Exception。

Error是错误,一般与虚拟机相关,无需使用catch捕获,无需抛出

Exception是异常,被分为Checked异常、Runtime异常。RuntimeException及其子类的实例被称为Runtime异常,其余都是Checked异常。Checked异常必须被显式处理,否则编译就会发生错误。Runtime异常则无需显式声明抛出,如需捕获,也可使用try catch实现。

39. finally是无条件执行吗?

答:是,不论什么情况,finally总是被执行。除非在try…catch块中使用System.exit(1)直接退出执行。

40. 在finally中return会发生什么?

答:finally中一般不要使用是方法终止的语句,如return、throw等,使用后会使try catch中的return、throw失效。因为在try catch块中遇到return、throw不会立刻执行,而是去找异常处理流程中是否包括finally块,若没有,则立刻执行终止方法。否则要先执行finally中的语句。

41. 对static关键字的理解

答:可用于修饰类中的成员变量、方法、初始化块、内部类(接口、枚举),被其修饰的成员就是类成员,它属于类,并不属于单个对象。类成员不能访问实例成员。

42. static修饰的类能不能被继承

答:可以。可用来修饰内部类,成为静态内部类。

43. static和final区别

答:static可以修饰成员变量、方法、初始化块、内部类

类变量:属于类,存储在方法区,并不存储在堆中,建议通过类名访问。

类方法:属于类,建议通过类名访问。

静态块:类加载时被隐式调用,之后不会被调用

静态内部类:它内部包含静态和非静态成员。它不能访问外部类的实例成员,只能访问外部类的静态成员。

final可以修饰类、变量、方法

final类:不可被继承

final变量:一旦获得初始值,不可被修改

final方法:不可被重写

44. 对泛型的理解

答:,Java中的泛型是假泛型,赋值时泛型信息其实会被擦除。

泛型类:public class xxx

泛型接口:public interface Generator

泛型方法:public static void xxx

45. 泛型擦除是什么

答:当把具有泛型信息的对象赋值给没有泛型信息的变量时,<>中的所有信息都会被擦除。

46. List和List有什么区别?

答:?是类型通配符,List代表元素类型未知的List

List 代表设置?的下限,即必须是T的父类

List代表设置?的上限,必须是T的字类。

47. Java反射机制

答:反射使得运行中的Java程序可以获取自身信息,可以操作类或对象的内部属性。JVM在运行时才动态加载类/调用方法,访问属性,无需事先知道运行对象是谁。

  • 获得Class对象
  • 判断某个对象是否为某个类的实例,还可访问成员
  • 创建实例
48. Java反射在实际项目中有哪些应用场景?

答:使用JDBC,使用反射加载驱动;框架配置是解析出的类是字符串,需要利用反射机制实例化;AOP的实现方案是在程序运行时创建目标对象的代理类,必须由反射机制实现。

49. 说一说Java的四种引用方式

答:包括强引用、软引用、弱引用、虚引用。目的在于让程序员决定某些对象的生命周期,并且有利于JVM进行gc。

强引用:创建对象并赋值给引用变量,永远不会被垃圾回收

类似String str = 'abc'就是强引用

软引用:常用于内存敏感的程序里,只要内存足够,便不会被回收;一旦内存空间不足,就会被回收。

用SoftReference表示软引用

弱引用:相比软引用,级别更低,只要JVM进行垃圾回收,无论内存是否充足,都会被回收。

用WeakReference表示弱引用

虚引用:类似于完全没有引用,用于跟踪对象被垃圾回收的状态,必须和引用队列联合使用。

用PhantomReference表示软引用

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691435.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号