java 类及对象的课后作业_JAVA类和对象课后作业
1.使用類的靜態字段和構造函數,我們可以跟蹤某個類所創建對象的個數。請寫一個類,在任何時候都可以向它查詢“你已經創建了多少個對象?”
代碼:
//顯示類
//YiMingLai 2016.10.19
public class lei {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
lei1 a=new lei1();
lei1 b=new lei1();
b.out();
}
}
class lei1{
static int n=0;
lei1(){
n++;
}
public void out(){
System.out.println("你已經創建了"+n+"個對象!");
}
}
2.請輸入并運行以下代碼,得到什么結果?
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Foo obj1=new Foo();
Foo onj2=new Foo();
System.out.println(obj1==obj2);
}
}
class Foo{
int value=100;
}
結果錯誤,輸出不出來。
原因:
當“==”施加于原始數據類型變量時,是比較變量所保存的數據是否相等
當“==”施加于引用類型變量時,是比較這兩個變量是否引用同一對象。
引用代表地址,所以“==”實際上相當于比較兩個引用類型變量中保存的對象地址是否相同。
3
.以下代碼為何無法通過編譯?哪兒出錯了?
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Foo obj1=new Foo();
}
}
class Foo{
int value;
public Foo(int intvalue){
value=intvalue;
}
}
結論:
如果類提供了一個自定義的構造方法,將導致系統不再提供默認構造方法。
4.運行代碼
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
InitializeBlockClass obj=new InitializeBlockClass();
System.out.println(obj.field);//?
obj=new InitializeBlockClass(300);
System.out.println(obj.field);
}
}
class InitializeBlockClass{
{field=200;}
public int field=100;
public InitializeBlockClass(int value){this.field=value;}
public InitializeBlockClass(){}
}
結論:
執行類成員定義時指定的默認值或類的初始化塊,到底執行哪一個要看哪一個“排在前面”。 執行類的構造函數。
類的初始化塊不接收任何的參數,而且只要一創建類的對象,它們就會被執行。因此,適合于封裝那些“對象創建時必須執行的代碼”。
5.運行代碼
class Root
{
static{
System.out.println("Root的靜態初始化塊");
}
{
System.out.println("Root的普通初始化塊");
}
public Root()
{
System.out.println("Root的無參數的構造器");
}
}
class Mid extends Root
{
static{
System.out.println("Mid的靜態初始化塊");
}
{
System.out.println("Mid的普通初始化塊");
}
public Mid()
{
System.out.println("Mid的無參數的構造器");
}
public Mid(String msg)
{
//通過this調用同一類中重載的構造器
this();
System.out.println("Mid的帶參數構造器,其參數值:" + msg);
}
}
class Leaf extends Mid
{
static{
System.out.println("Leaf的靜態初始化塊");
}
{
System.out.println("Leaf的普通初始化塊");
}
public Leaf()
{
//通過super調用父類中有一個字符串參數的構造器
super("Java初始化順序演示");
System.out.println("執行Leaf的構造器");
}
}
public class TestStaticInitializeBlock
{
public static void main(String[] args)
{
new Leaf();
}
}
結論:
靜態初始化塊只執行一次。 創建子類型的對象時,也會導致父類型的靜態初始化塊的執行。
6.上述神奇代碼(StrangeIntegerBehavior.java)輸出詭異的結果,原因何在?
結論:因為它們調用的Interger類的方法不同,所以結果不同
7.靜態方法中只允許訪問靜態數據,那么,如何在靜態方法中訪問類的實例成員(即沒有附加static關鍵字的字段或方法)?
class?Example
{
public?static?void?display()
{
System.out.println("類的方法");
}
public?void?displayOne()
{
System.out.println("對象的方法");
}
public?static?void?main(String[]?args)
{
Example.display();
Example?e=new?Example();
e.displayOne();
e.display();
}
}
總結
以上是生活随笔為你收集整理的java 类及对象的课后作业_JAVA类和对象课后作业的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: es6 --- Promise封装读取
- 下一篇: 苹果电脑安装打印机