Java基础练习题
2015-06-30 15:53
676 查看
一、Java概述
1.GC是什么? 为什么要有GC?答:GC是垃圾收集的意思(Garbage Collection),内存处理是编程人员容易出现问题的地方,
忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动
监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存
的显式操作方法。
2.一个”.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?
答:可以。必须只有一个类名与文件名相同(public class的名字与文件名相同,若没有public class,文件名任意)。
3.垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
答:
(1)对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是”可达的”,哪些对象是”不可达的”。当GC确定一些对象为”不可达”时,GC就有责任回收这些内存空间。
(2)垃圾回收器可以马上回收内存(马上回收不等于马上执行)。
(3)程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
4.此处,Something类的文件名叫OtherThing.java
class Something { private static void main(String[] something_to_do) { System.out.println("Do something ..."); } }
答案: 正确。从来没有人说过Java的class名字必须和其文件名相同。但public class的名字必须和文件名相同。
二、基本语法
运算符1.写出输出的结果。
// 考查运算符的优先级 class Demo { public static void main(String[] args) { int x = 0, y = 1; if (++x == y-- & x++ == 1 || --y == 0) System.out.println("x = " + x + ",y=" + y);// x = 2,y = 0; else System.out.println("y = " + y + ",x = " + x); } }
2.int n = 4,m = 15;
//插入代码,实现n和m值的交换
System.out.println(“n = ” + n + “,m = ” + m);
int n = 4, m = 15; // 方法一: int temp = n; n = m; m = temp; System.out.println("n = " + n + ",m = " + m); // 方法二: n = n + m; m = n - m; n = n - m; System.out.println("n = " + n + ",m = " + m); // 方法三: n = n ^ m; m = n ^ m; n = n ^ m; System.out.println("n = " + n + ",m = " + m);
3.如何手动实现整型数值62的二进制到十六进制的转换。
public static void main(String[] args) { //类库实现 String str1 = Integer.toBinaryString(62); String str2 = Integer.toHexString(62); System.out.println("62的二进制表示:" + str1); System.out.println("62的十六进制表示:" + str2); //位运算实现 int m = 62; int temp = m & 15;//获得低4位 String i = (temp > 9) ? (char) (temp - 10 + 'A') + "" : temp + ""; int n = m >>> 4; temp = n & 15; String j = (temp > 9) ? (char) (temp - 10 + 'A') + "" : temp + ""; System.out.println(j + "" + i); }
流程控制
1.switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:switch(expr)中,expr是一个整数表达式。因此传递给 switch-case 语句的参数应该是int、 short、 char 、 byte。long不能作用于swtich。JDK1.7新加入了String类型。
2.从键盘分别输入年、月、日,判断这一天是当年的第几天。
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("输入year:"); int year = scanner.nextInt(); System.out.println("输入month:"); int month = scanner.nextInt(); System.out.println("输入day:"); int day = scanner.nextInt(); int sumDay = 0; switch (month) { case 12: sumDay += 30; case 11: sumDay += 31; case 10: sumDay += 30; case 9: sumDay += 31; case 8: sumDay += 31; case 7: sumDay += 30; case 6: sumDay += 31; case 5: sumDay += 30; case 4: sumDay += 31; case 3: if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) sumDay += 29; else sumDay += 28; case 2: sumDay += 31; case 1: sumDay += day; } System.out.println(year + "年" + month + "月" + day + "日是今年的第" + sumDay + "天"); }
3.写一个程序,找出4位数的所有吸血鬼的数字。
例如:
1260=21*60
1827=21*87
public static void main(String[] args) { for (int num = 1001; num < 10000; num++) { math(num); } } public static void math(int num) { int[] temp1 = new int[2]; int[] temp2 = new int[2]; int a = num / 1000; int b = num / 100 % 10; int c = num / 10 % 10; int d = num % 10; int[] data = { a, b, c, d }; for (int i = 0; i < data.length; i++) { for (int j = 0; j < data.length; j++) { if (i == j) { continue; } temp1[0] = data[i]; temp1[1] = data[j]; for (int m = 0; m < data.length; m++) { if (m != i && m != j) { temp2[0] = data[m]; for (int n = 0; n < data.length; n++) { if (n != i && n != j && n != m) { temp2[1] = data ; multi(data, temp1, temp2); } } } } } } } public static int toInt(int[] temp) { int m = 0; int[] temp1 = new int[temp.length]; for (int i = 0; i < temp.length; i++) { temp1[i] = temp[i] * (int) Math.pow(10, temp.length - 1 - i);//关键之处 } for (int i = 0; i < temp1.length; i++) { m += temp1[i]; } return m; } public static void multi(int[] temp, int[] temp1, int[] temp2) { int i = toInt(temp1); int j = toInt(temp2); int k = toInt(temp); if (k == i * j) { System.out.println(k + "=" + i + "*" + j); } }
数组
1.
String[] stringArray = new String[3]; // 各元素的值默认为null for (int i = 0; i < stringArray.length; i++) { stringArray[i] = new String();// 对各元素进行初始化,但没有赋值 System.out.println(stringArray[i]);//空 (有别于null) }
2.
public static void main(String[] args) { int[] a = new int[] { (int) (Math.random() * 1000), (int) (Math.random() * 1000), (int) (Math.random() * 1000), (int) (Math.random() * 1000), (int) (Math.random() * 1000) }; System.out.println(a);//[I@1c7ab89d System.out.println(Arrays.toString(a));//[623, 56, 406, 727, 995] String str = "hello"; char[] chars = str.toCharArray(); for(int i = 0;i < chars.length;i++){ System.out.print(chars[i]);//hello } System.out.println(); System.out.println(Arrays.toString(chars));//[h, e, l, l, o] }
相关文章推荐
- 【Java基础】Swing设计_1:常用窗体
- struts2的工作机制
- JavaWeb学习记录(十九)——jsp标签库
- JavaWeb学习记录(十九)——jstl自定义标签库之传统标签
- SpringMVC+RestFul详细示例实战教程
- JavaWeb学习记录(十九)——jstl自定义标签之简单标签
- JavaWeb学习记录(二十)——Model1模式(javaBean+jsp)实现简单计算器案例
- jdk安装
- JavaWeb学习记录(十九)——开发JSTL自定义标签
- Java中的异常 Exception finally
- JavaWeb学习记录(二十二)——模式字符串与占位符
- JavaWeb学习记录(二十一)——国际化处理
- java中读取配置文件中数据的具体方法
- JavaWeb学习记录(二十四)——获取插入数据后,自动生成的id值
- JavaWeb学习记录(二十五)——权限管理总结
- JavaWeb学习记录(二十七)——定时发送邮件ServletContextListener监听实现
- JavaWeb学习记录(二十三)——文件上传与下载
- java集合类
- Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
- java.lang.IllegalArgumentException: parameter must be a descendant of this view