文章目录
- 1、Java有哪些数据类型?
- 2、面向对象的三个基本特征?
- 3、访问修饰符public,private,protected,以及不写时的区别?
- 4、什么是内部类?
- 5、&和&&的区别?
- 6、String 类可以继承吗?
- 7、String和StringBuilder、StringBuffer的区别?
- 8、String s = "xyz" 和 String s = new String("xyz") 区别?
- 9、== 和 equals 的区别是什么?
- 10、两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?
- 11、Java泛型是什么
- 12、java 中 IO 流分为几种?
- 13、Files的常用方法都有哪些?
- 14、什么是反射
- 15、Java获取反射的三种方法
1、Java有哪些数据类型?
有八种基本数据类型和三种引用数据类型
2、引用数据类型
一共有三种,分别是类,数组,接口,这些引用类型的默认值都为null
2、面向对象的三个基本特征?
面对对象的三个基本特征是:封装、继承、多态
继承:让某个类型的对象获得另一个类型的对象的属性和方法。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
封装:隐藏部分对象的属性和实现细节,对数据的访问只能通过外公开的接口。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
多态:对于同一个行为,不同的子类对象具有不同的表现形式。多态存在的3个条件:
1)继承 2)重写 3)父类引用指向子类对象。
3、访问修饰符public,private,protected,以及不写时的区别?
类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private)。受保护(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。
4、什么是内部类?
在Java中,可以将一个类的定义放在另外一个类的定义内部,这就是内部类。内部类本身就是类的一个属性,与其他属性定义方式一致。
内部类可以分为四种:成员内部类、局部内部类、匿名内部类和静态内部类。
实例代码
静态内部类(定义在类内部的静态类,就是静态内部类。)
成员内部类(定义在类内部,成员位置上的非静态类,就是成员内部类)
局部内部类(定义在方法中的内部类,就是局部内部类)
匿名内部类(匿名内部类就是没有名字的内部类,日常开发中使用的比较多)
5、&和&&的区别?
文字回答:
- &&:逻辑与运算符。
当运算符左右两边的表达式都为 true,才返回 true。同时具有短路性,如果第一个表达式为 false,则直接返回 false。
- &:逻辑与运算符、按位与运算符。
按位与运算符:用于二进制的计算,只有对应的两个二进位均为1时,结果位才为1 ,否则为0。
逻辑与运算符:& 在用于逻辑与时,和 && 的区别是不具有短路性。所在通常使用逻辑与运算符都会使用 &&,而 & 更多的适用于位运算。
实例代码:
& 不管前面的条件是否正确,后面都执行
&& 前面条件正确时,才执行后面,不正确时,就不执行,就效率而言,这个更好
6、String 类可以继承吗?
不可以,因为String类被final关键字修饰
String类被定义的时候加了final修饰符,final是java中的一个关键字,可以用来修饰变量、方法和类。用关键词final修饰的域成为最终域。用关键词final修饰的变量一旦赋值,就不能改变,也称为修饰的标识为常量。如果一个类的域被关键字final所修饰,它的取值在程序的整个执行过程中将不会改变。
7、String和StringBuilder、StringBuffer的区别?
1、运行速度
在这方面运行速度快慢为:StringBuilder > StringBuffer > String
String最慢的原因:String为字符串常量,即String对象一旦创建之后该对象是不可更改的,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。2、线程安全
StringBuffer:跟 String 类似,但是值可以被修改,使用 synchronized 来保证线程安全。
StringBuilder:StringBuffer 的非线程安全版本,没有使用 synchronized,具有更高的性能,推荐优先使用。总结
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
8、String s = “xyz” 和 String s = new String(“xyz”) 区别?
两个语句都会先去字符串常量池中检查是否已经存在 “xyz”,如果有则直接使用,如果没有则会在常量池中创建 “xyz” 对象。
另外,String s = new String(“xyz”) 还会通过 new String() 在堆里创建一个内容与 “xyz” 相同的对象实例。
9、== 和 equals 的区别是什么?
equals()和== 的区别:
一、对象类型不同
1、equals():是超类Object中的方法。
2、== :是操作符。
二、比较的对象不同
1、equals():用来检测两个对象是否相等,即两个对象的内容是否相等。
2、== :用于比较引用和比较基本数据类型时具有不同的功能。
" == "是判断两个变量或实例是不是指向同一个内存空间。
三、运行速度不同
1、equals():没有== 运行速度快。
2、 == :运行速度比equals()快,因为==只是比较引用。
对于基本类型变量,比较的变量保存的值是否相同,类型不一定要相同。
实例代码:
对于引用类型变量,比较的是两个对象的地址是否相同。
equals和==的代码实例
10、两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?
不对。hashCode() 和 equals() 之间的关系如下:
当有 a.equals(b) == true 时,则 a.hashCode() == b.hashCode() 必然成立,
反过来,当 a.hashCode() == b.hashCode() 时,a.equals(b) 不一定为 true。
比如在map中,hashCode() 相等,只能说明这两个键值对的哈希值相同,不代表这两个键值对相等。例如:
11、Java泛型是什么
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
下面是定义泛型方法的规则:
1、所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的 )。
2、每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
3、类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
4、泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像 int、double、char 等
实例代码
下面的例子演示了如何使用泛型方法打印不同类型的数组元素:
12、java 中 IO 流分为几种?
按照流的流向分,可以分为输入流和输出流;
按照操作单元划分,可以划分为字节流和字符流;
按照流的角色划分为节点流和处理流。
Java Io流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java I0流的40多个类都是从如下4个抽象类基类中派生出来的。
InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。
实例结构图
13、Files的常用方法都有哪些?
Files. exists():检测文件路径是否存在。
Files. createFile():创建文件。
Files. createDirectory():创建文件夹。
Files. delete():删除一个文件或目录。
Files. copy():复制文件。
Files. move():移动文件。
Files. size():查看文件个数。
Files. read():读取文件。
Files. write():写入文件。
14、什么是反射
反射是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能称为反射机制。
//Person2是一个实体类
①通过反射创建对象
②得到有参和无参的构造函数
③利用反射得到对象方法
④利用反射得到对象字段
15、Java获取反射的三种方法
1、通过new对象实现反射机制
2、通过路径实现反射机制
3、通过类名实现反射机制
如有侵权,请联系删除