练习1:创建一个类,它包含一个未初始化的String引用。验证该引用被Java初始化成了null。
代码如下:
public class Test5_1_1 {
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.str);
}
}
class Test{
String str;
}
onsole:
null
练习2:创建一个类,它包含一个在定义时就被初始化了的String域,以及另一个通过构造器初始化的String域。这两种方式有何差异?
代码如下:
public class Test5_1_2 {
public static void main(String[] args) {
Test1 t = new Test1();
System.out.println(t.s1+" “+t.s2);
t.s2 = “cba”;
System.out.println(t.s1+” "+t.s2);
}
}
class Test1{
String s1 = “abc”;
String s2;
}
Console:
abc null
abc cba
差别在于:
s1初始化了一次,而s2初始化了两次
s1一开始被初始化为”abc”,而s2先被初始化为null,然后再被初始化为”cba”
练习3:创建一个带默认构造器(即无参构造器)的类,在构造器中打印一条消息。为这个类创建一个对象。
代码如下:
public class Test5_3 {
public static void main(String[] args) {
new Test3();
}
}
class Test3{
public Test3() {
System.out.println(“这是一个无参构造器”);
}
}
console:
这是一个无参构造器
练习4:为前一个练习中的类添加一个重载构造器,令其接受一个字符串参数,并在构造器中把你自己的信息和接受的参数一起打印出来。
代码如下:
public class Test5_4 {
public static void main(String[] args) {
new Test4(“java”);
}
}
class Test4{
Test4(String s){
System.out.println("hello "+s);
}
}
console:
hello java
练习5:创建一个名为Dog的类,它具有重载的bark()方法。此方法应根据不同的基本数据类型进行重载,并根据被调用的版本,打印出不同类型的狗吠(barking)、咆哮(howling)等信息。编写main()来调用所有不同版本的方法。
代码如下:
public class Test5_5 {
public static void main(String[] args) {
Dog d = new Dog();
d.bark();
d.bark(“毛毛”);
}
}
class Dog{
public void bark(){
System.out.println(“barking”);
}
public void bark(String name){
System.out.println(name+" howling");
}
}
console:
barking
毛毛 howling
练习6:修改前一个练习的程序,让两个重载方法各自接受两个类型的不同的参数,但二者顺序相反。验证其是否工作。
代码如下:
public class Test5_6 {
public static void main(String[] args) {
Dog1 d1 = new Dog1();
d1.bark(1, “毛毛”);
d1.bark(“悠悠”, 2);
}
}
class Dog1{
public void bark(int age,String name){
System.out.println(“小名:”+name+" 年龄:"+age+" barking");
}
public void bark(String name,int age){
System.out.println(“小名:”+name+" 年龄:"+age+" barking");
}
}
console:
小名:毛毛 年龄:1 barking
小名:悠悠 年龄:2 barking
练习7:创建一个没有构造器的类,并在main()中创建其对象,用以验证编译器是否真的自动加入了默认构造器。
代码如下:
public class Test5_7 {
static String str;
public static void main(String[] args) {
System.out.println(str);
}
}
console:
null
练习8:编写具有两个方法的类,在第一个方法内调用第二个方法两次:第一次调用时不使用this关键字,第二次调用时使用this关键字——这里只是为了验证它是起作用的,你不应该在实践中使用这种方法。
代码如下:
public class Test5_8 {
/**
* 如果在方法内部调用同一个类的另一个方法,就不必使用this
* 人们只期望在必要时用到this
* 这里只是为了验证它是起作用的
*/
public static void main(String[] args) {
Apple apple=new Apple();
apple.getApple();
}
}
class Apple{
public void getApple(){
System.out.print("未使用this调用:");
createApple();
System.out.print("使用this调用:");
this.createApple();
}
public void createApple(){
System.out.println("已创建好……");
}
}
console:
未使用this调用:已创建好……