Java 课后答案

Java在线编译:https://tool.lu/coderunner/?id=7Gt

第一章 Java语言概述

  1. “java编译器将源文件编译为的字节码文件是机器码”这句话正确吗?
    答:不正确
  2. java应用程序的主类必须含有怎样的方法?
    答:含有main方法
  3. “java应用程序必须有一个类是public类”这句话正确吗?
    答:不正确,只能有一个public类
  4. “java Applet程序的主类必须是public类”这句话正确吗?
    答:正确,因为java Applet主类必须是Applet类的子类并且是public的类
  5. 请叙述java源程序的命名规则。
    答:与public的类同名。
  6. 源文件生成的字节码文件在运行时都加载到内存中吗?
    答:非也,动态随需要运行才加载。
  7. 面向对象的程序设计语言有那些基本特征?
    答:封装;继承;多态性。
  8. 在Java程序中有多个类文件时,用Java命令应该运行那个类?
    答:具有main方法的类

第二章 基本数据类型和数组

第三章 运算符、表达式和语句

1.下列System.out.printf的结果是什么?

1
2
3
4
int a=100,x,y;
x=++a;
y=a--;
System.out.printf("%d,%d,%d",x,y,a);

运行结果为:101,101,100

解:为方便理解我们将表达式调整(学会方法)

1
2
3
4
5
6
7
8
9
public class ceshi {

public static void main(String args[]) {
int a=100,x,y;
x=2*++a;
y=3*a--;
System.out.printf("%d,%d,%d",x,y,a);
}
}

运行结果为:202,303,100

本题的知识点:

  1. 前缀自增自减法(++a,–a): 先进行自增或者自减运算,再进行表达式运算。
  2. 后缀自增自减法(a++,a–): 先进行表达式运算,再进行自增或者自减运算

计算过程如下:

1
2
3
4
5
6
1、x=2*++a
先a自增,a=a+1=100+1=101
再计算x表达式,x=2a=2*101=202
2、y=3*a--(注意此时a的值已经变为101了)
先计算y表达式,y=3a=3*101=303
再将a自减,a=a-1=101-1=100

故输出结果为202,303,100

8.下列for语句的执行结果是什么?

1
2
3
4
5
6
7
8
9
10
for(int i=1;i<=4;i++) {
switch(i) {
case 1:System.out.printf("%c",'a');
case 2:System.out.printf("%c",'b');
break;
case 3:System.out.printf("%c",'c');
case 4:System.out.printf("%c",'d');
break;
}
}

执行结果为:abbcdd

解:可运行代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ceshi {
public static void main(String args[]){
for(int i=1;i<=5;i++) {
switch(i) {
case 1:System.out.printf("%c",'a');
case 2:System.out.printf("%c",'b');
break;
case 3:System.out.printf("%c",'c');
case 4:System.out.printf("%c",'d');
break;
}
}
}
}

本题的知识点: 若当前匹配成功的case不存在break,则从当前case开始,依次返回后续case的返回值,直到遇到break,跳出判断。

1
2
3
4
5
6
7
8
1. i=1 时,case 1 匹配成功, 无break
输出为:a,b
i=2 时,case 2 匹配成功, 遇 break
输出为:b
i=3 时,case 3 匹配成功, 无 break
输出为:cd
i=4 时,case 2 匹配成功, 遇 break
输出为:d

故for语句的执行结果为:abbcdd

第四章 类与对象

第五章 继承、接口与泛型

第六章 字符串和正则表达式

  1. 对于字符串
      String s1=new String(“ok”);
      String s2=new String(“ok”);
    写出下列表达式的值
      s1==s2  false
      s1.equals(s2)   true
    解:

问题:==与equals()的区别:

  1. ==: 是否指向了一个地址即一个对象?
  2. equals(): String类重写了equals()方法,引用所指的对象的内容相同?
1
2
3
4
5
6
7
8
9
10
public class zfc {
public static void main(String[] args){
String s1 = new String("OK");
// 创建s1之前,先创建string对象"OK",存到string常量池中。
// 我们最后得到的 s1 是string常量池中"OK"的副本,单独储存在堆中,有独立的地址。
String s2 = new String("OK");
System.out.println(s1 == s2); //false
System.out.println(s1.equals(s2)); //true
}
}。

https://www.cnblogs.com/aspirant/p/9193112.html

new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。
String s2 = new String(“OK”); 定义一个S2引用,指向对象new String(“abc”);这会在堆内存中再开一个对象,此对象也是志向常量池中的”abc”;但对象各是各,它们的堆内存地址可不样。
String s2 = new String(“OK”);根据”OK”这个String对象再次构造一个String对象,在堆中重新new一块儿内存,把指针赋给栈,
将新构造出来的String对象的引用赋给s2。 因此,只要是new String(),则栈中的地址都是指向最新的new出来的堆中的地址,

第七章 常用实用类

第八章 线程

第九章 输入、输出流

您的鼓励将支撑我继续创作,么么哒
0%