您的位置:首页 > 编程语言 > Java开发

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]
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: