オブジェクト向け練習1
12587 ワード
1、運転結果を書き出す
コンパイルに失敗し、コンパイル時に異常が投げ出されたが、処理されなかった.1 func()にthrows宣言もcatch②またはtry catch③処理もありません.および3つの処理方式.
1、1 func()でthrowsを実行した場合、結果は?
funcは異常を投げ出し,呼び出し者に投げつける.finallyは必ず実行するので、B、異常があるのでSystem.out.println("A");実行されません.呼び出し者は異常を処理するので,C,最終D.実行結果:
2、②catch
funcで処理が行われているので、EB、呼び出し元はこれ以上処理しなくても良いのでAD
実行結果:
3、throw new Exception();try catchで包む
異常を処理したのでEB、呼び出し先は処理しないのでAD
実行結果:
======================================================================
2、コード実行結果を書き出す:
サブクラスコンストラクション関数Demo()を実行すると、super()メソッドが呼び出されます.子類の実例化過程を調べる.
実行結果:
====================================================================
3、プログラムの結果を書く:
インタフェースAにfuncメソッドが定義されていないため、コンパイルに失敗しました.
まとめ:マルチステートコンパイルは左を見て、実行は右を見てください.
=======================================================================
4.プログラム結果を書く
実行結果:
for(初期値付与;判断条件;増減量付与)
{
文;
}
循環運転順序:初期値の付与->判断条件->文->増減量の付与.
f.show('A');実行結果は「A」と印刷されます.f.show('B')の実行結果は「B」を印刷し、f.show('B')の値はfalseであるため、f.show('B')&&(i<2);条件が成立せず、サイクルが終了し、DとCが運転できない.
=======================================================================
5.プログラム結果を書く
A a=get() = A a=new B();
コンパイルに失敗しました.Aインタフェースにはtest()メソッドが定義されていません.コンパイルは左を見て、実行は右を見てください.
=====================================================================
6.プログラム結果を書き出す:
int i=4;ローカル変数.Super d=new Demo("D");サブクラスはまずDemoの構造方法を実行する、super()を実行し、Bを印刷する.このとき、サブクラスは親変数iを呼び出し、値は0から2に変わり、Systemを実行する.out.println("C");,Cを印刷します.iこの場合は5です.
実行結果:
====================================================================
7、
================================================================
8.プログラム結果を書く
コンパイルに失敗し、非静的内部クラスでは静的変数を定義できません.内部クラスが静的メンバーを定義している場合は、内部クラスを静的に修飾する必要があります.
==================================================================
9.問題を選択し、誤った答えが間違っている原因を書き出し、単行注釈で書く.
次の関数はDemoのサブクラスに存在します.A.public int show(int a,int b){return 0;}//はい、上書きできます.B.private int show(int a,int b){return 0;}//いいえ、権限が足りません.C.private int show(int a,long b){return 0;}//はい、親クラスとは関数ではありません.上書きされていません.重荷に相当します.D.public short show(int a,int b){return 0;}//指定した関数と同じクラス、または子の親クラスには表示されないため、できません.E.static int show(int a,int b){return 0;}//いいえ、静的は静的のみを上書きできます.
==========================================================
10.thisキーワードの意味を書き出し、finalにはどのような特徴がありますか?this:このクラスのオブジェクトを表し、どのオブジェクトがthisが存在する関数を呼び出すか、thisはどのオブジェクトを表します.
final:1、修飾クラス、変数(メンバー変数、静的変数、局所変数)、関数.2,修飾されたクラスは継承できない.3,修飾された関数は上書きできない.4,修飾された変数は定数であり,1回のみ付与できる.
==========================================================
11.プログラム結果を書き出す:
変数に上書きはありません.
結果:
===============================================================
12補完コード
まずインタフェースの上書き方法
方法1:
方法2:
==============================================================
13.プログラム結果の書き出し
結果:
try { showExce(); System.out.println("A");}showExce()を実行します.の場合、異常を投げ出し、そのコードブロックを中断し、catchを実行する
===========================================================
14.プログラム結果の書き出し
コンパイルに失敗し、親に空のパラメータ構造関数は存在しません.または、サブクラスでsuper指定によって親クラス構築関数を呼び出すこともできます.
==================================================================
15.プログラム結果の書き出し
コンパイルに失敗しました.
public int get(){return 4;}
public long get(){return 5;}
上書きではありません.子の親には同じ名前の関数があります.
==============================================================
16.プログラム結果の書き出し
コンパイルに失敗しました.throwは単独では存在しません.そうしないと、次の文を定義したり、実行したりできません.
(以下20題目
このときのthrowは単独ではなく、次の文が実行される可能性があります.)
システムを取り除くout.println("A");コンパイルはパスでき、結果は;
====================================================================17.
A.位置1にnew Inner()を書く.B.位置2にnew Inner()を書く.C.位置2にnew d.Inner()を書く.D.位置2にnew Demoを書く.Inner();
A.位置1にnew Inner();//okB.位置2にnew Inner();//いいえ、主関数は静的ですから.innerにアクセスするにはstatic修飾が必要です.C.位置2にnew d.Inner();//エラー、フォーマットエラー. new new Demo().Inner();D.位置2にnew Demoを書く.Inner();//エラーです.innerは静的ではありませんから.
====================================================================18.プログラムの結果を書き出す
コンパイルに失敗しました.複数のcatchの場合、親のcatchは下に置く必要があります.
修正後の運転結果:
====================================================================19.補完コード
mainでshowメソッドを呼び出すのは、mainが静的メソッドであるため、直接showを呼び出すことはできないのでnew Demo()を用いる.show();を呼び出します.
Testクラスに転送されます.匿名の内部クラスで、new Test(){public void func();
====================================================================20.プログラムの結果を書き出す
まず、outputはStringタイプのデータです.
foo(0); System.out.println(output);次のようになります.
outputはstaticで修飾されているので、このときのoutput="134"
に続く
foo(0); System.out.println(output);
public class Demo {
public static void func()//①{
try{
throw new Exception();//③
}//②
finally{
System.out.println("B");
}
}
public static void main(String[] args) {
try{
func();
System.out.println("A");
}catch(Exception e){
System.out.println("C");
}
System.out.println("D");
}
}
コンパイルに失敗し、コンパイル時に異常が投げ出されたが、処理されなかった.1 func()にthrows宣言もcatch②またはtry catch③処理もありません.および3つの処理方式.
1、1 func()でthrowsを実行した場合、結果は?
public class Demo {
public static void func() throws Exception {
try {
throw new Exception();
}finally {
System.out.println("B");
}
}
public static void main(String[] args) {
try {
func();
System.out.println("A");
} catch (Exception e) {
System.out.println("C");
}
System.out.println("D");
}
}
funcは異常を投げ出し,呼び出し者に投げつける.finallyは必ず実行するので、B、異常があるのでSystem.out.println("A");実行されません.呼び出し者は異常を処理するので,C,最終D.実行結果:
B
C
D
2、②catch
public class Demo {
public static void func() {
try {
throw new Exception();
} catch (Exception e) {
System.out.println("E");
}finally {
System.out.println("B");
}
}
public static void main(String[] args) {
try {
func();
System.out.println("A");
} catch (Exception e) {
System.out.println("C");
}
System.out.println("D");
}
}
funcで処理が行われているので、EB、呼び出し元はこれ以上処理しなくても良いのでAD
実行結果:
E
B
A
D
3、throw new Exception();try catchで包む
public class Demo{
public static void func() {
try {
try {
throw new Exception();
} catch (Exception e) {
System.out.println("E");
}
}finally {
System.out.println("B");
}
}
public static void main(String[] args) {
try {
func();
System.out.println("A");
} catch (Exception e) {
System.out.println("C");
}
System.out.println("D");
}
}
異常を処理したのでEB、呼び出し先は処理しないのでAD
実行結果:
E
B
A
D
======================================================================
2、コード実行結果を書き出す:
class Test000
{
Test000()
{
System.out.println("Test");
}
}
class Demo extends Test000
{
Demo()
{
System.out.println("Demo");
}
public static void main(String[] args)
{
new Demo();
new Test000();
}
}
サブクラスコンストラクション関数Demo()を実行すると、super()メソッドが呼び出されます.子類の実例化過程を調べる.
実行結果:
Test
Demo
Test
====================================================================
3、プログラムの結果を書く:
interface A{}
class B implements A
{
public String func()
{
return "func";
}
}
class Demo
{
public static void main(String[] args)
{
A a=new B();
System.out.println(a.func());
}
}
インタフェースAにfuncメソッドが定義されていないため、コンパイルに失敗しました.
まとめ:マルチステートコンパイルは左を見て、実行は右を見てください.
=======================================================================
4.プログラム結果を書く
class Fu
{
boolean show(char a)
{
System.out.println(a);
return true;
}
}
class Demo extends Fu
{
public static void main(String[] args)
{
int i=0;
Fu f=new Demo();
Demo d=new Demo();
for(f.show('A'); f.show('B')&&(i<2);f.show('C'))
{
i++;
d.show('D');
}
}
boolean show(char a)
{
System.out.println(a);
return false;
}
}
実行結果:
A
B
for(初期値付与;判断条件;増減量付与)
{
文;
}
循環運転順序:初期値の付与->判断条件->文->増減量の付与.
f.show('A');実行結果は「A」と印刷されます.f.show('B')の実行結果は「B」を印刷し、f.show('B')の値はfalseであるため、f.show('B')&&(i<2);条件が成立せず、サイクルが終了し、DとCが運転できない.
=======================================================================
5.プログラム結果を書く
interface A{}
class B implements A
{
public String test()
{
return "yes";
}
}
class Demo
{
static A get()
{
return new B();
}
public static void main(String[] args)
{
A a=get();
System.out.println(a.test());
}
}
A a=get() = A a=new B();
コンパイルに失敗しました.Aインタフェースにはtest()メソッドが定義されていません.コンパイルは左を見て、実行は右を見てください.
=====================================================================
6.プログラム結果を書き出す:
class Super
{
int i=0;
public Super(String a)
{
System.out.println("A");
i=1;
}
public Super()
{
System.out.println("B");
i+=2;
}
}
class Demo extends Super
{
public Demo(String a)
{
//super();
System.out.println("C");
i=5;
}
public static void main(String[] args)
{
int i=4;
Super d=new Demo("D");
System.out.println(d.i);
}
}
int i=4;ローカル変数.Super d=new Demo("D");サブクラスはまずDemoの構造方法を実行する、super()を実行し、Bを印刷する.このとき、サブクラスは親変数iを呼び出し、値は0から2に変わり、Systemを実行する.out.println("C");,Cを印刷します.iこの場合は5です.
実行結果:
B
C
5
====================================================================
7、
interface Inter
{
void show(int a,int b);
void func();
}
class Demo
{
public static void main(String[] args)
{
// ; ,
}
}
Inter in = new Inter()
{
public void show(int a,int b)
{
}
public void func()
{
}
};
in.show(4,5);
in.func();
================================================================
8.プログラム結果を書く
class TD
{
int y=6;
class Inner
{
static int y=3;
void show()
{
System.out.println(y);
}
}
}
class TC
{
public static void main(String[] args)
{
TD.Inner ti=new TD().new Inner();
ti.show();
}
}
コンパイルに失敗し、非静的内部クラスでは静的変数を定義できません.内部クラスが静的メンバーを定義している場合は、内部クラスを静的に修飾する必要があります.
==================================================================
9.問題を選択し、誤った答えが間違っている原因を書き出し、単行注釈で書く.
class Demo
{
int show(int a,int b){return 0;}
}
次の関数はDemoのサブクラスに存在します.A.public int show(int a,int b){return 0;}//はい、上書きできます.B.private int show(int a,int b){return 0;}//いいえ、権限が足りません.C.private int show(int a,long b){return 0;}//はい、親クラスとは関数ではありません.上書きされていません.重荷に相当します.D.public short show(int a,int b){return 0;}//指定した関数と同じクラス、または子の親クラスには表示されないため、できません.E.static int show(int a,int b){return 0;}//いいえ、静的は静的のみを上書きできます.
==========================================================
10.thisキーワードの意味を書き出し、finalにはどのような特徴がありますか?this:このクラスのオブジェクトを表し、どのオブジェクトがthisが存在する関数を呼び出すか、thisはどのオブジェクトを表します.
final:1、修飾クラス、変数(メンバー変数、静的変数、局所変数)、関数.2,修飾されたクラスは継承できない.3,修飾された関数は上書きできない.4,修飾された変数は定数であり,1回のみ付与できる.
==========================================================
11.プログラム結果を書き出す:
class Fu
{
int num=4;
void show()
{
System.out.println("showFu");
}
}
class Zi extends Fu
{
int num=5;
void show()
{
System.out.println("showZi");
}
}
class T
{
public static void main(String[] args)
{
Fu f=new Zi();
Zi z=new Zi();
System.out.println(f.num);
System.out.println(z.num);
f.show();
z.show();
}
}
変数に上書きはありません.
結果:
4
5
showZi
showZi
===============================================================
12補完コード
interface A
{
void show();
}
interface B
{
void add(int a,int b);
}
class C implements A,B
{
//
}
class D
{
public static void main(String[] args)
{
C c=new C();
c.add(4,2);
c.show();// 。
}
}
まずインタフェースの上書き方法
public void add(int a,int b){
}
public void show(){
}
方法1:
private int a,b;
public void add(int a,int b){
this.a=a;
this.b=b;
}
public void show(){
System.out.println(a+b);
}
方法2:
private int sum;
public void add(int a,int b){
sum=a+b;
}
public void show(){
System.out.println(sum);
}
==============================================================
13.プログラム結果の書き出し
class Demo
{
public static void main(String[] args)
{
try
{
showExce();
System.out.println("A");
}
catch(Exception e)
{
System.out.println("B");
}
finally
{
System.out.println("C");
}
System.out.println("D");
}
public static void showExce()throws Exception
{
throw new Exception();
}
}
結果:
B
C
D
try { showExce(); System.out.println("A");}showExce()を実行します.の場合、異常を投げ出し、そのコードブロックを中断し、catchを実行する
===========================================================
14.プログラム結果の書き出し
class Super
{
int i=0;
public Super(String s)
{
i=1;
}
}
class Demo extends Super
{
public Demo(String s)
{
i=2;
}
public static void main(String[] args)
{
Demo d=new Demo("yes");
System.out.println(d.i);
}
}
コンパイルに失敗し、親に空のパラメータ構造関数は存在しません.または、サブクラスでsuper指定によって親クラス構築関数を呼び出すこともできます.
==================================================================
15.プログラム結果の書き出し
class Super
{
public int get(){return 4;}
}
class Demo15 extends Super
{
public long get(){return 5;}
public static void main(String[] args)
{
Super s=new Demo15();
System.out.println(s.get());
}
}
コンパイルに失敗しました.
public int get(){return 4;}
public long get(){return 5;}
上書きではありません.子の親には同じ名前の関数があります.
==============================================================
16.プログラム結果の書き出し
class Demo
{
public static void func()
{
try
{
throw new Exception();
System.out.println("A");
}
catch(Exception e)
{
System.out.println("B");
}
}
public static void main(String[] args)
{
try
{
func();
}
catch(Exception e)
{
System.out.println("C");
}
System.out.println("D");
}
}
コンパイルに失敗しました.throwは単独では存在しません.そうしないと、次の文を定義したり、実行したりできません.
(以下20題目
if(i==1)
throw new Exception();
output+="1";
このときのthrowは単独ではなく、次の文が実行される可能性があります.)
システムを取り除くout.println("A");コンパイルはパスでき、結果は;
B
D
====================================================================17.
class Demo
{
public void func()
{
// 1;
}
class Inner{}
public static void main(String[] args)
{
Demo d=new Demo();
// 2
}
}
A.位置1にnew Inner()を書く.B.位置2にnew Inner()を書く.C.位置2にnew d.Inner()を書く.D.位置2にnew Demoを書く.Inner();
A.位置1にnew Inner();//okB.位置2にnew Inner();//いいえ、主関数は静的ですから.innerにアクセスするにはstatic修飾が必要です.C.位置2にnew d.Inner();//エラー、フォーマットエラー. new new Demo().Inner();D.位置2にnew Demoを書く.Inner();//エラーです.innerは静的ではありませんから.
====================================================================18.プログラムの結果を書き出す
class Exc0 extends Exception{}
class Exc1 extends Exc0{}
class Demo
{
public static void main(String[] args)
{
try
{
throw new Exc1();
}
catch(Exception e)
{
System.out.println("Exception");
}
catch(Exc0 e)
{
System.out.println("Exc0");
}
}
}
コンパイルに失敗しました.複数のcatchの場合、親のcatchは下に置く必要があります.
修正後の運転結果:
Exc0
====================================================================19.補完コード
interface Test
{
void func();
}
class Demo
{
public static void main(String[] args)
{
// ;( )
}
void show(Test t)
{
t.func();
}
}
mainでshowメソッドを呼び出すのは、mainが静的メソッドであるため、直接showを呼び出すことはできないのでnew Demo()を用いる.show();を呼び出します.
Testクラスに転送されます.匿名の内部クラスで、new Test(){public void func();
new Demo().show(new Test(){
public void func();
});
====================================================================20.プログラムの結果を書き出す
class Test
{
public static String output="";
public static void foo(int i)
{
try
{
if(i==1)
throw new Exception();
output+="1";
}
catch(Exception e)
{
output+="2";
return;
}
finally
{
output+="3";
}
output+="4";
}
public static void main(String args[])
{
foo(0);
System.out.println(output);
foo(1);
System.out.println(output);
}
}
まず、outputはStringタイプのデータです.
foo(0); System.out.println(output);次のようになります.
134
outputはstaticで修飾されているので、このときのoutput="134"
に続く
foo(0); System.out.println(output);
13423