Java学习笔记05--强制类型转换 ;内部类(了解即可) ;Java异常体系及异常处理;iOS中的try catch 块

===============java相关讲解=============

强制类型转换:

基本数据类型的转换

小数据类型---->大的数据类型  自动类型转换

大数据类型----->小数据类型   强制类型转换     
                           小数据类型  变量名 = (小数据类型)大数据类型;

引用数据类型的转换

小数据类型----->大数据类型     自动类型转换。

大数据类型----->小数据类型      强制类型转换

类型转换最场景的问题: java.lang.ClassCastException。 强制类型转换失败。

代码举例:

//动物类
abstract class Animal{
    String name;
    public Animal(String name){
        this.name = name;
    }
    public abstract void run();
}
//老鼠
class Mouse extends Animal{
    public Mouse(String name){
        super(name);
    }
    public  void run(){
        System.out.println(name+"四条腿慢慢的走!");
    }
    //老鼠特有方法---打洞
    public void dig(){
        System.out.println("老鼠在打洞..");
    }
}
//鱼
class Fish extends Animal{
    public Fish(String name){
        super(name);
    }
    public  void run(){
        System.out.println(name+"摇摇尾巴游啊游 !");
    }
    //吹泡泡
    public void bubble(){
        System.out.println(name+"吹泡泡...!");
    }
}
class Demo2 {
    public static void main(String[] args) 
    {
        /* Animal a = new Mouse("老鼠"); //多态 //调用子类特有的方法 Mouse m = (Mouse)a; //强制类型转换 m.dig(); */
        Mouse m = new Mouse("米老鼠");
        Fish f = new Fish("草鱼");
        print(f);
    }
    //需求: 定义一个函数可以接收任意类型的动物对象,在函数内部要调用到动物特有的方法。
    public static void print(Animal a){ // Animal a = new Mouse("米老鼠");
        if(a instanceof Fish){
            Fish f = (Fish)a;
            f.bubble();
        }else if(a instanceof Mouse){
            Mouse m = (Mouse)a;
            m.dig();
        }
    }
}

内部类

内部类:一个类定义在另外一个类的内部,那么该类就称作为内部类。
内部类的class文件名: 外部类$内部类. 好处:便于区分该class文件是属于哪个外部类的。

内部类的类别:

1. 成员内部类:

成员内部类的访问方式:

  • 方式一:在外部类提供一个方法创建内部类的对象进行访问。
  • 方式二:在其他类直接创建内部类的对象。 格式:外部类.内部类 变量名 = new 外部类().new 内部类();

注意: 如果是一个静态内部类,那么在其他类创建 的格式:
外部类.内部类 变量名 = new 外部类.内部类();

内部类的应用场景: 我们在描述A事物的时候,发现描述的A事物内部还存在另外一个比较
复杂的事物B时候,而且这个比较复杂事物B还需要访问A事物的属性等数据,那么这时候
我们就可以使用内部类描述B事物。

比如: 人--->心脏
class 人{
    血
    氧气
    等....
    class 心脏{
    }       
 }

内部类的好处:内部类可以直接访问外部类的所有成员。

内部类要注意的细节:

  • 如果外部类与内部类存在同名的成员变量时,在内部类中默认情况下是访问内部类的成员变量。
    可以通过”外部类.this.成员变量名” 指定访问外部类的 成员。
  • 私有的成员内部类只能在外部类提供一个方法创建内部类的对象进行访问,不能在其他类创建对象了。
  • 成员内部类一旦出现了静态的成员,那么该类也必须 使用static修饰。

2、局部内部类:

                •
                •
                •
            敬请期待。。。

Java异常体系及异常处理

通过下方链接了解
https://blog.csdn.net/liyunxiangrxm/article/details/53392173

===============iOS相关讲解=============

异常处理

Objective – C中提供了异常处理和线程同步,这是解释在这篇文章和“Threading”的支持。要打开这些功能的 支持,使用GNU编译器集(海合会)版本3.3和更高版本的-fobjc-exceptions开关。

支持的编译器指令

@try,@catch,@throw,和 @finally。
代码有可能抛出有可能抛出的异常是封闭在一个@ try块。 @catch()块包含为@ try 块抛出的异常的异常处理逻辑。一个@ finally块包含代码必须执行是否引发异常与否。您可以使用@throw指令抛出一个异常,这基本上是一个对Objective – C对象的指针。你可以使用NSException对象但不限于他们。

@try {
 < #statements#>
}
@catch (NSException *exception) { //捕捉最具体的异常类型
 < #handler#>
}
@catch (NSException *ne) { //捕获一个比较重要的异常类型。

}
@catch (id ue) { //再次掷出捕获的异常。
}
@finally { //不管有没有异常finally内的代码都会执行。
 < #statements#>
}

代码演示

NSArray * array = @[@"Apple", @"Android", @"Windows"];
@try {
array = [NSArray addObject:@"HHH"];
}
@catch (NSException *exception) {
 NSLog(@"exception = %@", exception);
}
@finally {
 NSLog(@"不管有没有异常我都执行!");
 NSLog(@"%@", array);
}

NSException *e = [NSException exceptionWithName:@"CupUnderflowException" reason:@"The level is below 0" userInfo:nil];
@throw e;

控制台输出:

2013-10-18 15:25:17.990 objective-c——NSArray[11282:303] +[NSArray addObject:]: unrecognized selector sent to class 0x7fff71f701e0
2013-10-18 15:25:17.992 objective-c——NSArray[11282:303] exception = +[NSArray addObject:]: unrecognized selector sent to class 0x7fff71f701e0
2013-10-18 15:25:17.992 objective-c——NSArray[11282:303] 不管有没有异常我都执行!
2013-10-18 15:25:17.993 objective-c——NSArray[11282:303] (
    Apple,
    Android,
    Windows
)
2013-10-18 15:25:17.994 objective-c——NSArray[11282:303] *** Terminating app due to uncaught exception 'CupUnderflowException', reason: 'The level is below 0'
*** First throw call stack:
(
    0   CoreFoundation                      0x00007fff85f91b06 __exceptionPreprocess + 198
    1   libobjc.A.dylib                     0x00007fff835113f0 objc_exception_throw + 43


    4   libdyld.dylib                       0x00007fff83cea7e1 start + 0
)
libc++abi.dylib: terminate called throwing an exception
    原文作者:黑码哥
    原文地址: https://blog.csdn.net/liyunxiangrxm/article/details/81100648
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞