学习Java简单整理笔记--Day15

一、泛型
    1,作用:将数据类型作为参数进行传递
    2,定义:
        1. 语法:<X,Y,...>
            注意:这个字母随便定义
        2. 情况:
            1,在方法上定义
                使用:修饰符之后,返回值类型之前调用

package com.qf.demo01;
import javax.security.auth.x500.X500Principal;
public class Demo01 {
	public static void main(String[] args) {
        // T代表字符串String类型
		test05("德玛西亚");
        // T代表整型int
		test05(1);
        // T代表浮点型double
		test05(1.1);
        // T也可以表示对象
		test05(new Demo01());
	}
	public static <T> void test05(T str) {
		System.out.println("测试:"+str);
	}
	public static <T,X> T test06(T t,X x,T t2) {
		T t3;
		return t;
	}
}

结果:


            2,在类上定义
                使用:在类名之后
                注意:在继承关系中,父类有泛型,子类也必须定义该泛型

package com.qf.demo01;
import java.util.ArrayList;
public class Demo02 {
	public static void main(String[] args) {
		A<Integer> a = new A<Integer>(10);
		Integer i = a.testA();
		System.out.println(i);
		
		B<String, Integer> b = new B<String,Integer>();
	}
}
//泛型定义在类上
class A <T>{
	private T t;
	public A() {
		
	}
	public A(T t) {
		this.t = t;
	}
	public <X> T testA() {
		return t;
	}
}
//泛型在继承关系中
class B <X,T> extends A <T>{
	
}


            3,在接口上定义
                使用:接口名之后
                注意:在继承关系中,父接口有泛型,子接口也必须定义该泛型
                    在实现关系中,父接口有泛型,子类也必须定义该泛型
        注意:
            静态方法不能定义泛型
            静态常量也不能定义泛型

package com.qf.demo01;
public class Demo03 {
	public static void main(String[] args) {
		Test03<K> k = new Test03<K>();
	}
}
// 泛型定义在接口中
interface TestInterface<K>{
	K test();
	default void test02(K k) {
		
	}
}
interface Test02Interface<K> extends TestInterface<K>{
	
}
abstract class Test03<K> implements TestInterface<K>{
	
}


    3,使用
        情况:
            1,在方法中使用
                任何一处可以使用数据类型的地方,如返回值类型,形参列表,局部
            变量的数据类型
            2,在类上定义
                创建该类对象时,必须指明泛型所对应的数据类型
        注意:泛型中只能收到引用数据类型(*)
            
二、异常
1,分类
    1.错误:Error
        原因:因为硬件不足,导致的程序崩溃
        处理:不需处理
        OutOfMemoryError:内存溢出,可以通过优化解决
    2. 异常:Exception
        原因:程序员在代码编写时,对情况考虑不周全导致的
        处理:需要处理
        分类:检查异常/运行异常
2,常见的异常:
    数组下标越界:ArrayIndexOutOfBoundsException
    空指针异常:NullPointerException
    算数异常:ArithmeticException
    类型转型异常:ClassCastException
    ..
3,异常的处理
    1,解决异常【try  catch】
        语法:
            try{
                有可能产生异常的代码
            }catch(异常类型1 变量名){
                处理方案
            }catch(异常类型2  变量名){
                处理方案
            }
            ....
            finally{
                string =“谢谢谢谢”;
            }
        注意:catch中异常类型先子后父
    2,声明异常【throws】
        语法:
            访问权限修饰符  修饰符  返回值类型  方法名(形参列表) throws
         异常类型1,异常类型2,...{
        
            }

 

    3,抛出异常【throw】
        语法:
            throw
4,自定义异常
    1,创建一个类
    2,使继承与一个异常
    3,提供一个无参构造函数调用父类无参构造函数或者调用父类有参构造函数
    注意:父类构造函数中的实参为错误信息   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值