內部類
package AA;public class類 {int de=123;
StringBuffer dee=newStringBuffer();public class成員內部類{public voidff() {
System.out.println("這是成員內部類方法");
}
}/*1.可以訪問外部類所有的成員,包括被聲明為私有(private)的;
2.可以使用任何訪問權限修飾符,包括protected和private;*/
public voidff1() {int de1=12;class局部內部類{public voidff() {
System.out.println("局部內部類方法");
System.out.println(de);
}
}new局部內部類().ff();
}/*1.不允許使用任何訪問權限修飾符;
2.創建局部內部類的對象的語法,必須在聲明局部內部類之后;調用只能在該方法里
3.可以訪問外部類所有的成員,包括被聲明為私有(private)的;*/
private static class靜態內部類{public voidff() {
System.out.println("這是靜態內部類方法");
}
}/*1.只能訪問static成員
2.可以使用任何訪問權限修飾符,包括protected和private;
3.可以在其它類中直接創建靜態內部類的對象,語法格式為:*/
public voiddy() {new 成員內部類().ff();//調用成員內部類方法
//調用方法二:? ?類.成員內部類 de=new 類.成員內部類();
new 類().ff1();//調用局部內部類方法
new 靜態內部類().ff();//調用靜態內部類方法
//調用方法二:類.靜態內部類? de=new 靜態內部類();
}public static voidmain(String[] args) {new類().dy();
}
}
參考:
匿名內部類
參考:
抽象類
異常
先來點基礎的:
public classxin {public static voidmain(String[] args) {try{
System.out.println("hhhhh");int de[]=new int[10];
de[10]=12;
}catch(ArrayIndexOutOfBoundsException fr){
System.out.println("chucuo");
}
}
}
上面代碼解釋了:一個基本異常的基本格式,try{? } ......catch(){? ?}
try。。。catch:不需要拋出異常
自定義異常:
package AA;
import java.util.Scanner;class de1 extends Exception{//首先類要繼承Exception(就是異常類)
publicde1(String fr) {
super(fr);
}
}public classde{public static int fg(int a,int b) throws de1{//聲明方法并且拋出異常(throws de1)
Scanner de1=new Scanner(System.in);
System.out.println("請輸入數值1");
a=de1.nextInt();
System.out.println("請輸入數值2");
b=de1.nextInt();if(a<0||b<0) {throw new de1("負數錯誤");//拋出異常
}if(a>100||b>100) {throw new de1("數大于100錯誤");
}return a+b;
}public static voiddayin() {
System.out.println("異常啦");
}public static voidmain(String[] args) {try{
fg(3123,3123); //調用上面的方法,下面并且打印出結果,打印方法是打印方法的返回值//這里的數字沒多大用處,主要是不出錯//根據上面的方法給出的變量所以這里必須要加//但是上面有輸入流,就直接將這個覆蓋了
System.out.println(fg(3123,3123));
}catch(de1 e) {//這個是try后面必須接的//括號里面的是異常類型,e是結果
dayin();
System.out.println(e);
}
}
}//1,程序通過try走,并且執行fg方法//2,當用戶輸入數值時,會進行判斷,如果不符合就會拋出異常(這里是拋在de1類里面,關鍵字:throw new 類名)//3,try執行已經異常了,所以將會執行catch,而catch可以有多個,那個catch則會判斷try異常屬于哪一類型的異常//4,判斷完后,將會執行catch里面的語句,用來提示用戶//4的注意:上面的判斷下面什么(負數錯誤)(da數錯誤),其實是de1類的構造string方法,可以去掉,直接在catch里面加提語句都一樣//列如下面:去掉構造,在catch里面加已是語句
package AA;
import java.util.Scanner;classde1 extends Exception{
}public classde{static int fg(int a,int b) throws de1{//聲明拋出異常(throws de1)
Scanner de1=new Scanner(System.in);
System.out.println("請輸入數值1");
a=de1.nextInt();
System.out.println("請輸入數值2");
b=de1.nextInt();if(a<0||b<0) {throw new de1();//拋出異常,說白了就是
}if(a>100||b>100) {throw newde1();
}return a+b;
}static voiddayin() {
System.out.println("異常啦");
}public static voidmain(String[] args) {try{
fg(3123,3123); //調用上面的方法,下面并且打印出結果,打印方法是打印方法的返回值//這里的數字沒多大用處,主要是不出錯//根據上面的方法給出的變量所以這里必須要加//但是上面有輸入流,就直接將這個覆蓋了
System.out.println(fg(3123,3123));
}catch(de1 e) {//這個是try后面必須接的//括號里面的是異常類型,e是結果
dayin();
System.out.println("有錯誤喲!");
System.out.println(e);
}
}
}
結論:
1,首先一個自定義異常的要有一個拋回來的異常類,這個類用于其它類執行的方法時拋出來的異常,就拋在這個類里面
注意:這個類必須是繼承Exception(推薦)和RuntimeException
2,然后就可以在‘其他類’里面隨意加方法了,
注意:需要拋出異常就必須在方法名后面加throws 類名,格式:方法名 throws 類名(被拋異常類)
3,聲明好方法后,就可以了
注意:這里番外哈,1,如果里面有if判斷語句,可以在判斷下方在加個'異常拋出',格式:throw new 類名(被拋異常類)
2,注意:throw:是放在方法體里面的
throws:是放在方法體上面的(就是方法名上面)
4,接下來就是用try.....catch了。try里面放異常的方法(說白了就是在try里面執行方法體)
catch就是異常類型了,自定義異常,那‘異常類型’肯定就是‘被拋異常類名’
catch語句格式:catch(類名 返回值(結果)),結果隨意
這個語句一般放在開始執行程序是調用方法那里
下面再舉一個例子:判斷輸出輸入的值是否是負數
package hhh;public classhh extends Exception{static inta,c;static int b=211;public static void de(inta1) throws hh{if(a1<0){throw newhh();
}
a=b*a1*21;
System.out.println("輸出:"+a);
}public static voidmain(String []args){try{
de(-6);
}catch(hh re){
System.out.println("負數無效");
}
}
}
執行結果:拋出異常,執行catch語句
例子二
package AA;
import java.util.InputMismatchException;
import java.util.Scanner;public class異常 extends Exception{
Scanner de=new Scanner(System.in);public voidks()throws 異常 {try{for(;;) {
System.out.println("請輸入數字");int dee=de.nextInt();if(dee<0)throw new異常();
System.out.println("正確");
}
}catch(異常 e) {
System.out.println("對不起你輸入的有誤!!");new異常().ks();
}catch(InputMismatchException ee) {
System.out.println("數字過大或者非數字");new異常().ks();
}
}public static voidmain(String[] args) throws 異常 {new異常().ks();
}
}/*編寫程序:判斷用戶輸入的是否為負數,否則異常*/
執行結果:
(內部類、匿名類、匿名內部類、抽象類、異常、終態)