概念问题
Objiect类的toString方法返回的是什么?equals方法比较的是什么?子类重写后返回什么?比较什么?
- toString方法没有重写返回的是调用对象的地址值,重写后返回的是调用对象的成员变量值
- equals方法没有重写返回的是对象地址值是否相同的boolean值,重写后返回的是对象成员变量内容比较是否相同的boolean值
方法重载与方法重写区别?
- 方法重载是在一个类中 方法名相同 参数列表不同(可以是个数不同,参数类型不同,参数位置不同),与返回值无关
- 方法重写则是子类或实现类需要重写父类或接口中继承过来的方法,方法声明必须相同
如何获取当前日期对象?getTime方法获取到的毫秒值开始时间是谁?
获取当前日期对象的步骤为
- 调用java.util.Date类
- 在测试类中创建Date当前日期对象
getTime方法获得的是调用对象距离时间原点的毫秒值
时间原点即开始时间 为1970年1月1日 00:00:00 而中国时区是在东八区 需要延后8小时
示例代码如下
//导包
import java.util.Date;
//创建类 调用main方法
public class Date_Practise{
public static void main(String[] args){
//创建Date对象
Date date = new Date();
//打印 获取当前时间值
System.out.println(date); //打印效果例如:Sun Jun 25 18:50:46 CST 2023
//利用date对象调用getTime方法 因为1秒等于1000毫秒所以time的数据类型为长整型
long time = date.getTime();
System.out.println(time);
}
}
日期如何转换为指定格式的字符串?字符串如何解析成日期?
日期→字符串
- 创建Date类 获得当前日期
- 利用DateFormat类 将日期转换为字符串
示例代码如下
//导包
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
//创建类 调用main方法
public class Date_Practise{
public static void main(String[] args){
//创建Date对象
Date date = new Date();
//调用DateFormat类,由于其作为抽象类 调用其子类对象SimpleDateFormat创建df格式化对象
DateFormat df = new SimpleDateFormat("y年MM月dd日 HH:mm:ss E");
//使用DateFormat中的format方法 获得指定格式的字符串
String str = df.format(date);
System.out.println(str);
}
}
字符串→日期
- 给定一个日期格式的字符串
- 利用DateFormat类 将字符串格式录入 转换为日期
String str1 = "2021-10-13";
DateFormat df1 = new SimpleDateFormat("yy-MM-dd");
//需要调用的是parse方法 返回值为Date类
Date d = df1.parse(str1);
System.out.println(d);
如何获取日历类的对象?通过日历对象获取到年
- 利用Java中的Calendar类,而此类作为抽象类 提供了静态常量创建对象
- 通过ger(int field)方法可以获得给定日历字段的值
//静态常量创建对象
Calender c = Calender.getInstance();
//通过Calender中的静态常量获取年月日
int year = c.get(Calender.YEAR)
System类的复制数组的方法是什么参数是什么?
- static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
- 形参列表中的含义依次为 源数组 源数组开始索引,目标数组.目标数组的开始索引 要复制的个数
public static void main(String[] args) {
//给一个源数组
int[] arr = {2,3,1,5,7};
//定义一个目标数组,设置长度为 4
int[] arr1 = new int[4];
//调用System的arraycopy方法
System.arraycopy(arr,1,arr1,0,4);
//遍历目标数组 打印结结果
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]); //3 1 5 7
}
}
冒泡排序的原理是什么?代码
- 原理::前一个元素和后一个元素比较,如果大于则交换 否则不变
- 代码示例
public class SuanFa_Pratice {
public static void main(String[] args) {
/./给定一个实例数组
int[] arr = {2,5,3,1,0};
//冒泡排序的原理:相邻两个元素作比较 如果前一个元素比后一个元素大则交换 否则不变
//外层控制循环比较的次数
for (int i = 0; i < arr.length-1; i++) {
//内层控制每次循环比较几次 每次比较都减少一个元素
for (int i1 = 0; i1 < arr.length-1-i; i1++) {
if(arr[i1]>arr[i1+1]){
int tem = arr[i1];
arr[i1] = arr[i1+1];
arr[i1+1] = tem;
}
}
}
System.out.println(arrayToString(arr));
}
//构造一个方法arrayToString 将数组以字符串形式打印出来
public static String arrayToString(int[] arr){
//创建StringBulider类的对象sb 形成字符串缓冲区 依次添加数组所需元素
StringBuilder sb = new StringBuilder("[");
//遍历数组
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]);
if(i == arr.length-1){
sb.append("]");
}else{
sb.append(",");
}
}
return sb.toString();
}
}
二分查找的原理是什么?代码?
原理
- 升序排列,取数组(必须有序)的中间索引位置比较大小 如大于则 数组前面舍去比较后面,反之亦然;若相等,则直接返回索引值;若不等,返回-1。
代码实例
public class TwoCheck {
public static void main(String[] args) {
//给定一个有序的数组实例
int[] arr1 = {2, 4, 7, 13, 18, 34, 38, 45, 46};
//定一个想要查找的值
int a1 = 38;
//调用方法
System.out.println(twoIndex(arr1, a1));//返回结果6
}
//定义一个二分查找的方法twoIndex
public static int twoIndex(int arr[],int a){
//先设定最大最小值
int min = 0;
int max = arr.length;
//指针mid的位置要一直在min和max的中间 因此要放到循环里面设置
//使用的是while循环结构 判断的是循环能够进行下去的条件 那就是min<=max
while(min<= max) {
int mid = (min + max) / 2;
if(arr[mid]>a){
max = mid-1;
}if(arr[mid]<a){
min = mid+1;
}
if(arr[mid]==a){
return mid;
}
}
return -1;
}
}
如何进行超大数的计算?如何进行小数的精确计算?
超大数的计算
使用Java的BigInteger类做超大数的计算
其在java.math包下,可以做不可变的、任意精度的整数计算
当数据范围超过long类型后 可以使用此类做运算 是不限制长度的
小数的精确计算
可以使用Java的BigDecimal做小数的精确计算
其在java.math包下 可以做不可变的 任意精度的 有符号的十进制数
可以实现超大浮点数的精确计算
代码演示自动装箱和拆箱
- 拆装箱指的是基本数据类型作为常量无法进行有效应用 将其转变为Java的包装类型可以调用方法
- 代码示例
//自动装箱
Integer i = 10;
//自动拆箱
int i1 = i;
字符串如何转换为基本类型?基本类型如何转换为字符串?
- 基本类型转换为字符串 可以直接转(以int为例)
String s = 10 + " ";
- 字符串转换为基本类型则需包装类中的方法parseInt(以Int为例)
int i = Integer.parseInt("10");
异常的继承体系?编译时异常和运行时异常区别?
throw关键字和throws关键字的区别
- throw 异常对象 在方法体中使用 抛出异常对象
- throws 异常的类型 在方法的声明中使用 声明异常
如何异常没有捕获到finally代码块中的内容是否会执行?
- 可以执行
- 只要进入到try catch语句中 除非system.exit()JVM虚拟机退出 否则finally中的语句一定执行
父类方法没有抛异常子类重写父类方法时能不能抛异常?
- 不可以
- 子类抛的异常只能小于等于父类抛出的异常(指的是异常的继承地位) 而父类都没有抛异常那子类不能抛出异常
- 此时子类如果出现异常 只能用try catch捕获异常