程序员必看题(更新中)

char类型是否能保存一个汉字

答:可以保存一个汉字, —计算机数据存储以字节为单位的 ,通常一个字节=1kb=1024 byte 每个字节的取值范围是-128~127之间 可以保存一个字母/英文字符/数字/ 由于中文字符比较多 所以用两个字节来保存 同时char是 16位(梁字节)刚好可以保存一个 汉字

float num = 3.14159是否正确

答:不正确,因为Java默认的浮点数类型是double 比float进度高,需要进行强转,或者加’F‘或’f’ 进行定义。建议不要用 强转因为精度会损失。正确的做法是加F或f

局部变量可以用什么修饰符修饰

答:final 和默认

3-2.6==0.4?

不等因为浮点数类型不精确

如何精确计算浮点数

public class Demo2 {
public static void main(String[] args) {
	BigDecimal x = new BigDecimal("3");
	BigDecimal y = new BigDecimal("2.6");
	BigDecimal z = x.subtract(y);//计算差值3-2.6
	double val = z.doubleValue();//将结果转化为double类型
	System.out.println(val);
	System.out.println(val==0.4);
}
}

最高效的方法算出2*16

答:2<<4
Java中定义了左移右移运算符:<<,>>,>>>

& 和 &&的区别

答:&是位与运算符,&&是逻辑与运算符。后者效率更高。因为&&前的函数如果是false那么后边的不执行。

short s=1;s=s+1;能正确通过编译码

答:不可以,因为Java默认整数类型是int,所以1是int类型,与short相加值为int类型,不能赋值给short。

表达式9/2和9/2.0结果形同吗

答:结果不相同,后者结果为double类型

两个整数相加结果一定正确吗,两个整数相乘结果一定正确吗?

答:不一定,因为整数int类型有效值是-2147483648~~2147483647
超出范围的话结果就不再准确;

如何自定义类实现四舍五入

package test.du;

public class Demo01 {
	//这个类用于自定义四舍五入,舍去小数位数
	//256.99999
	public static String round(double value,int dotNum) {//这个参数用来定义保留的位数
		String strValue=String.valueOf(value);//转化为字符串
		int pos = strValue.indexOf(".");//小数点位置
		int len =strValue.length();//数字的总位数包括“.”
		int dotLen = len-1-pos;//实际小数位数
		double endValue = 0.0;//保存中间变量
		String endNum="";//保存最终的结果
		if(dotNum<dotLen) {//需要保留的小数位数小于实际位数
			//获取需要进位的小数位
			String  cNum= strValue.substring(pos+dotNum+1,pos+dotNum+2);
			int iNum = Integer.parseInt(cNum);//转化为整数
			//获得需要保留但没进行舍入处理的数值
			String sNum = strValue.substring(0, pos+dotNum+1);
			//转化为double类型
			endValue =Double.parseDouble(sNum);
			if (iNum>=5) {//如果需要进行四舍五入的数大于5那么进1
				String endPos = "";//存放需要进位小数的值
				String dotValue = "";//连接小数点后面的多个0
				for (int i = 1; i < dotNum; i++) {
					dotValue+="0";
				}
				endPos = "0."+dotValue+"1";
				endValue = endValue+Double.parseDouble(endPos);//四舍五入后的值
				strValue = String.valueOf(endValue);//将处理后的值转化为字符串
				 pos = strValue.indexOf(".");//结果的小数点位置
				 len =strValue.length();//结果的数字的总位数包括“.”
				 dotLen = len-1-pos;//结果的小数位数
				 if (dotLen<dotNum) {//如果小数位数不足则补足位数
					 for (int i =pos+dotLen+1; i < pos+dotNum+1; i++) {
						endNum = String.valueOf(endValue)+"0";//补足小数位数
					}
					
				}else {//如果小数位数正好或超出范围那份进行截取
					endNum=String.valueOf(endValue).substring(0,pos+dotNum+1);
				}
			}else {//如果需要进位的数小于5
				endNum = sNum;
			}
		}else if(dotNum==dotLen){//需要保留的小数位数等于实际位数
			endNum= String.valueOf(value);
			
		}else {//需要保留的小数位数大于实际位数
			for (int i =1 ; i < dotNum-dotLen; i++) {
				strValue+="0";
			}
			endNum = strValue;
		}
		return endNum;
	}
	public static void main(String[] args) {
		String val = round(23.333365, 2);
	}
}

如何用控制台输出一个菱形

package ch.tedu;

public class Demo02 {
	public static void main(String[] args) {
		int floor = 7;
		//必须控制floor为基数否则不能成为菱形
		floor = floor%2==0? floor+1:floor;
		//先进行上半部分输出
		for (int i = 1; i <= floor; i+=2) {
			for (int kong1 = floor; kong1 > i-1; kong1--) {
				System.out.print(" ");//输出空格
			}
			for (int xing1 = 1; xing1 <= i; xing1++) {
				System.out.print("* ");
			}
			System.out.println();
		}
		//输出下半部分
		for (int i = 1; i <= floor-2; i+=2) {
			for (int kong1 = 1; kong1 <i+3; kong1++) {
				System.out.print(" ");//输出空格
			}
			for (int xing2 = floor-2; xing2 >=i; xing2--) {
				System.out.print("* ");
			}
			System.out.println();
		}
	}

}

在这里插入图片描述

李白遇见花和店(遇到店壶里酒加一倍,遇见花喝一斗)李白5遇花和店,喝光壶中酒,问李白原来壶中多少酒?

答:利用逆向思维,假如先遇到的店,那么第五次遇到店和花之前还有0.5斗酒,遇到第四次时为。(0.5+1)/2=0.75斗酒。以此类推,得到公式

double x=0.0;
for(int i=0;i<5;i++){
x=x+1;//遇到花喝一斗之前
x=x/2;//遇到店加一倍之前
}
System.out.println("李白壶中原来有"+x+"斗酒");

打印7行的杨辉三角

package ch.tedu;

public class Demo3 {
//打印7行杨辉三角
	public static void main(String[] args) {
		//创建一个二维数组
		int arr[][]=new int [7][];
		for (int i = 0; i < arr.length; i++) {
			//创建第二层数组
			arr[i]=new int[i+1];
			//遍历第二层数组
			for (int j = 0; j <=i; j++) {
				if (j==0||i==0||j==i) {
					arr[i][j]=1;
				}else {
					//通过共实计算
					arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
				}
				System.out.print(arr[i][j]+"   ");
			}
			System.out.println();
			
		}
	}
}

数组的排序算法

冒泡排序

package ch.tedu;

public class Order1 {
public static void main(String[] args) {
	//冒泡排序
	int [] arr= {2,6,8,45,12,1};
	for (int i = 1; i < arr.length; i++) {
		for (int j = 0; j < arr.length-i; j++) {
			//比较两个相邻的元素大的数向后冒泡
			if (arr[j]>arr[j+1]) {
				int index = arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=index;
			}
		}
	}
	for (int i : arr) {
		System.out.println(i);
		
	}
}
}

面向对象有哪些特征

答:封装,继承,多态
封装:可以隐藏实现细节,是代码模块化
继承:可以实现代码的复用,
多态:减少代码的耦合度,更加灵活。(一个类有不同的行为,有相同的方法名但实现不同的行为)

类和对象的区别

答:类:可视为对象的模板
对象:类的具体实现
(狗是类,那么泰迪,松狮,拉布拉多就是对象)

抽象类和抽象方法有什么作用

答:抽象类:只能作为其他类的基类
抽象类中可以包含抽象成员,但普通类不可以。
抽象方法:必须声明在抽象类里,
不能使用private和static修饰,
不提供方法的实现,只让其子类重写的方法

什么是方法重载

答:方法名相同,但参数,参数的个数,参数类型不同的方法

只能通过构造方法创建对象吗?

答:可以通过工厂方法,和反射方法创建对象。

静态语句块的作用

答:当使用语句块所对应的类时候,就会被分配内存空间,并执行语句块内代码

java是值传递还是引用传递

答:java用对象最为参数时,传递的是对象的地址值,也是值传递(java没有引用传递)

抽象类和接口的区别

1.前者只能单一继承,后者可以多继承
2.前者可以提供成员的实现细节
3.定义的关键字不同

什么是被隐藏的成员变量?如何操作它们

答:当子类定义了变量名和父类相同的时,此时子类并不会继承父类的变量。子类隐藏了父类的变量。用super. 调用父类的变量

什么是方法重写

答:如果子类定义的方法,名字,返回值,参数类型,个数与父类相同,那么我们成之类重写了父类的方法。目的是为了实现子类实现不同的行为,如果想调用父类的方法,可用super. 调用。

final,finaly,finalize什么区别

答:final是修饰符,finaly是try /cath块之后关闭资源的finalize是gc清除垃圾机制

内部类是否可以被继承

答:可以被继承。通过外部类打点继承如:***** extends ClassA.ClassB
当某个类继承内部类时这个类必须有一个有参构造方法 并且参数是外部类ClassA。构造器里面必须a.super();

什么是匿名内部类

答:这个类如果只是用一次,那么使用匿名内部类比较合适,
匿名内部类没有变量名,直接用new Class
所以会使用默认的构造方法创建类对象

如何创建Class对象

答:1.Class.forName(全类名)
2.类名.class 如:Student.class
3.对象J.getClass();如:student.getClass();

如何用反射创建对象

1.创建对象
在这里插入图片描述
2.构造器 创建对象
在这里插入图片描述
3.调用方法
在这里插入图片描述
在这里插入图片描述

==和equals有什么区别

答:== 比较的是地址,equals比较的是值

什么是自动拆装包

答:jdk5.0出现的新内容,自动装包指的是----把基本数据类型自动转化为包装类;自动拆包反之

String str= null;和String str = “”;一样吗?

答:不一样 ,前者没分配地址,后者分配了 地址。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值