1.java.sql.Date和java.util.Date的区别?
java.sql.Date是java.util.Date的子类;
java.util是JDK中的日期类,精确到时、分、秒、毫秒;
java.sql.date与数据库Date向对应的一个类型,只有日期部分,时分秒都会设置为0,如2020-04-05 00:00:00;
要从数据库时间字段取 时、分、秒、毫秒数据,可以使java.sql.Timestamp。
2…关于构造方法
java类中不写构造方法,编译器会默认提供一个无参构造(即类中的构造方法可以省略);
方法名可以与类名相同,但不符合命名规范;
一个类中可以定义多个构造方法(参数不一致,即重载);
构造方法在一个对象被创建(new)时执行。
3.Java中接口的修饰符可以是?
private,protected,final不行,abstract可以;
接口中的访问权限修饰符只能是public或default;
接口中的方法必须要实现类实现,所以不能使用final;
接口中所有方法默认都是abstract,通常abstract省略不写。
4.关于关键字的使用
1.static方法能处理非static的属性(错误)原因:加载class时首先完成static方法装载,非static属性和方法还没完成初始化,所以不能调用;
2.abstract方法必须在abstract类中(对);
3.abstract类中可以有private的成员(对);
4.abstract不能与final并列修饰同一个类(对)。
5.关于内存回收
1.内存回收程序负责释放无用内存(错)原因:内存由JVM负责释放,程序员无法直接释放内存,垃圾回收时间不确定;
2.必须创建一个线程来释放内存(对);
3.内存回收程序可以在指定的时间释放内存对象(对);
4.内存回收程序允许程序员直接释放内存(对)。
6.说说对面向对象的理解
对java来说,一切皆是对象
对象具有以下特点:
- 对象具有属性和行为;
- 对象具有变化的转态;
- 对象具有唯一性;
- 对象都是某个类别的实例。
面向对象的特性:
- 抽象性:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面;
- 继承性:指子类拥有父类的全部特征和行为,这是类之间的一种管子,java只支持单继承;
- 封装线:封装是将代码及其处理的数据绑定在一起的一种编程机制,该机制保证了程序和数据都不受外部干扰且不被无用,封装的目的在于保护信息;
- 多态性:多态性体现在父类的属性和方法被子类继承后或接口实现类实现后,可以具有不同的属性或表现方式。
7.内存泄漏和内存溢出的区别
内存溢出(out of memory):指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;
内存泄漏(memory leak):指程序在申请内存后,无法解释已申请的内存空间,内存泄漏堆积会导致内存被占光;
memory leak最终会导致out of memory。
8.不通过构造方法能创建对象吗?
Java创建对象的方式:
1.用new语句创建对象;
2.运用反射,调用java.lang.Class或java.lang.reflect.Constructor类的newInstance()方法
3.调用对象的clone()方法;
4.运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法;
1和2会调用构造函数,3和4不会调用构造函数。
9.匿名内部类可以继承或实现接口吗?为什么?
匿名内部类本质上是对父类方法的重写 或 接口的方法的实现。
从语法角度看,匿名内部类创建处是无法使用关键字继承类或实现接口。
原因:
- 匿名内部类没有名字,所以它没有构造函数,因为没有构造函数,所以它必须通过父类的构造函数来实例化,即匿名内部类完成把创建对象的任务交给了父类去完成;
- 匿名内部类里创建新的方法没有太大意义,新方法无法被调用;
- 匿名内部类一般都是用来覆盖父类的方法;
- 匿名内部类没有名字,所以无法进行向下的强制类型转换,只能持有匿名内部类对象引用的变量类型的直接或间接父类。
10.什么是多态?如何实现?好处?
多态:同一个接口,使用不同的实例而执行不同操作,同一个行为具有多个不同表现形式或形态的能力.
实现多态的三个条件:
- 继承;
- 子类重写父类的方法;
- 父类引用变量指向子类对象;
实现多态的技术称为:动态绑定,是指在执行期间判断所引用对象的实际类型,根据其实际类型的类型调用其相应的方法;
Java中使用父类的引用变量调用子类重写的方法,即可实现多态;
好处:
- 消除类型之间的耦合关系;
- 可替换性 ;
- 可扩充性
- 接口性;
- 灵活性;
- 简化性。
11.同步代码块和同步方法有什么区别?
1.同步方法就是在方法前加关键字synchronized;同步代码块则是在方法内部使用synchronized;
2.加锁对象相同的话,同步方法锁的范围大于等于同步代码块,一般加锁范围越大,性能越差;
3.同步方法如果是static方法,等同于同步方法块锁在该Class对象上。
12.内部类和静态内部类有什么区别?
1.静态内部类不需要有指向外部类的引用;非静态内部类需要持有对外部类的引用;
2.静态内部类可以有静态方法,属性;非静态内部类则不能有静态方法、属性;
3.静态内部类只能访问外部类的静态成员,不能访问外部类的非静态成员;非静态内部类能够访问外部类的静态和非静态成员;
4.静态内部类不能依赖于外部类的实例,直接实例化内部类对象;非静态内部类通过外部类的对象实例生成内部类对象。
13…存在 i+1< i 的值吗?
存在,如 Integer.MAX_VALUE;
因为Integer.MAX_VALUE是正数,而Integer.MAX_VALUE+1=-2147483648。
14.可序列化对象为什么要定义serialversionUID值?
1.SerialVersionUid是为了序列化对象版本控制,告诉JVM各版本反序列化时是否兼容;
2.如果在新版本中这个值修改了,新版本就不会兼容旧版本,反序列化时就会抛出InvalidClassException异常;
3.仅增加了一个属性,希望向下兼容,老版本的数据都保留。就不用修改;
4.删除了一个属性,或更改了类的继承关系,就不能不兼容旧数据,这时应该动手更新SerialVersionUid。
15.final修饰变量,是引用不能变?还是引用的对象不能变?
1.final修饰基本类型变量,值不能改变;
2.final修饰引用类型变量,栈内存中的引用不能改变,所指向的堆内存中的对象的属性值可能可以改变。
16.以下正则表达式的含义
\d:匹配一个数字字符,等价于[0-9];
\D:匹配一个非数字字符,等价于[^0-9];
\s:匹配任何空白字符,包括空格、制表符、换页符等,等价于[\f\n\r\t\v];
. :匹配除换行符\n之外的任何单字符串,匹配 . 符号需要转义,使用 \.;
* :匹配前面的子表达式零次或多次,匹配*字符需要转义,使用\*;
| :将两个匹配条件进行逻辑 或 运算;
+ :匹配前面的子表达式一次或多次,要匹配 + 字符需要转义,使用\+;
[0-9]{
6}:匹配连续6个0-9之间的数字;
17.Java属于编译型还是解释型语言?
计算机不能理解高级语言,只能理解和运行机器语言,必须把高级语言翻译成机器语言。
翻译有两种方式:1.编译 2.解释;
用编译型的语言写的程序执行之前,需要一个编译过程,通过编译系统把高级语言翻译成机器语言,把源高级程序编译成机器语言文件,以后直接运行而不需要编译了,所以编译型语言的程序执行效率高;
解释型语言在运行的时候才解释称机器语言,每个语句都是执行的时候才翻译的,每执行一次翻译一次,效率低;
Java是一种兼具编译和解释性特点的语言,.java文件会被编译成与平台无关的.class文件,但是.class字节码文件无法被计算机直接识别,仍需要JVM翻译成机器语言,所以严格来说,Java是一种解释型语言。
18.基本类型byte表示的数值范围是多少,System.out.println(‘a’ + 1)的结果是多少?
128~127
'a’是char类型,1是int类型;
int与char相加,char会强转int,char的ASCII码值是97,加一起为98。
19.静态与非静态成员变量区别?
1.生命周期不同:非静态成员变量随着对象的创建而存在;静态成员变量随着类的加载而存在;
2.调用方式不同:非静态成员变量用 对象名.变量名 调用;静态成员变量用 类名.变量名,JDK1.7后也能用 对象名.变量名 调用;
3.别名不同:非静态成员变量也可以称为实例变量;静态变量称为类变量;
4.数据存储位置不同:成员变量数据存储在堆内存的对象中,对象的特有数据存储在方法区(共享数据区)的静态区,对象的共享数据。
20.日期类型如何格式化?字符串如何转日期?
日期转字符串
DateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
String time = sdf.format(new Date());
字符串转日期
DateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
String s = “2020-04-06 12:22:33”;
Date date = sdf.parse(s);