异常
程序可能存在的问题
异常的树状图
Throwable ├── Error └── Exception ├── RuntimeException//运行异常 └── IOException//其它 ├── FileNotFoundException ├── EOFException ├── ... └── SQLException ├── DataTruncation ├── BatchUpdateException ├── ... └── ...
运行异常(跑了才知道已经是bug了)
编译异常
编译异常的解决方法
1.检查代码看看是不是自己犯傻了
2.try....catch方法(捕获)
try {age(n1);}catch (yichang1 e){e.printStackTrace(); System.out.println("出现bug");}
3.throws 关键字(抛出)
public static void age(int a)throws yichang1//进行抛出 if(a==18){ System.out.println("Age; "+ a);} else { throw new yichang1("Age不对"); }}
自定义异常类
运行异常类的定义
public class runtimeException extends RuntimeException {//继承RuntimeException public runtimeException() { } //重写构造器 public runtimeException(String message) { super(message); } }
编译异常类的定义
public class yichang1 extends Exception{//继承编译异常 public yichang1() { super(); }//重写构造器 public yichang1(String message) { super(message); } }
编译异常的具体实例
public class yichang{ public static void main(String[] args) { Scanner n = new Scanner(System.in); int n1 = n.nextInt(); try {age(n1);}catch (yichang1 e){e.printStackTrace();//进行监管 System.out.println("出现bug");} ;} public static void age(int a)throws yichang1{//编译异常必须用throws进行方法抛出不然会报错 if(a==18){ System.out.println("Age; "+ a);} else { throw new yichang1("Age不对");//抛出异常 } }}
包装类
定义:基本数据类型对应的引用类型
public static void main(String[] args) { Integer i1=1;//简单的赋值创建对象 Integer i2=2; Integer i3=i1+i2; System.out.println(i3); }
integer的成员方法
除开Character每个都有对应的parse方法进行类型转换
String st=str.nextLine(); int i=Integer.parseInt(st); System.out.println(i);
String字符串
直接赋值
String a="abc";
使用new来进行字符串对象创建
char []a={'a','b','c'};//可用于改变字符串内容 String b = new String(a); System.out.println(b);
Byte []a={97,98,99};//可进行数字字符转换 Byte b = new Byte(a); System.out.println(b);
StringBulider
StringBulide的构造方法
StringBulide的成员方法
StringBuilder sb = new StringBuilder();//创建对象 sb.append(aab);//添加内容 sb.reverse();//反转内容 int a= sb.length();//获取长度 String str = sb.toString();//变为字符串
StringBuffer
成员方法
StringBuffer n=new StringBuffer(); n.append("aaaa"); n.insert(3,'c');//在第三个符号添加一个 n.delete(3,5);//删除4,5位置的符号 String c=n.substring(2);//返回从2开始后面的符号 System.out.println(c);
bigdecimal类
用于解决浮点运算失真
构造方法
成员方法
double a=0.1; double b=0.2; BigDecimal a1=new BigDecimal.valueOf(a);//接入浮点型 BigDecimal b1=new BigDecimal.valueOf(b); BigDecimal c1=a1.add(b1);//加法 BigDecimal c2=a1.subtract(b1);//减法 BigDecimal c3=a1.multiply(b1);//乘法 BigDecimal c4=a1.divide(b1, RoundingMode.HALF_UP);//除法(四舍五入) double c5=c4.doubleValue();//将其换回为浮点型
泛型
泛型:可以在加入之前便约束数据类型
泛型类:修饰符 class 类名<类型>{ }
public class fanxing<E> {//E为未知类型 Object []obj=new Object[10]; int a=0; public void add(E e) { obj[a++]=e; } public E get(int n){ return (E)obj[n];}}//强制转换为E类
泛型方法
public static <E> void add(E e) { obj[a++]=e; }
泛型接口
list ,set和map
list的常用方法
ArrayList<Integer>list=new ArrayList<Integer>(); list.add(1);//添加 list.set(2,1);//修改 list.remove(1);//删除 list.get(0);//取得
set集合保存数据不能重合是唯一无序的
-
HashSet: 这是基于哈希表实现的Set接口,它不允许集合中有重复的值。它的主要优点是插入和查询操作通常非常快,因为它利用了哈希表的特性。但是,HashSet中的元素是无序的。
-
TreeSet: TreeSet实现了SortedSet接口,因此它能够保持元素的有序状态。元素的排序是根据它们的自然排序或者由提供的Comparator确定的。由于需要维护元素的排序状态,所以相比HashSet,TreeSet的性能可能会稍差一些。
-
LinkedHashSet: 这个实现维护了一个运行于所有条目的双链表。这个数据结构使得插入顺序被保留,并且迭代访问更为快速
map
基本概念:Map中的每个元素都是一个键值对,即一对对象,其中一个对象作为键(Key),另一个对象作为值(Value)。键是唯一的,而值可以重复。
常用实现类:Java提供了多种Map的实现类,如HashMap、TreeMap和LinkedHashMap等。它们各自有不同的特点和适用场景。例如,HashMap提供了常数时间的性能,而TreeMap则能够保持键的顺序。
基本操作:Map接口定义了一些基本的操作方法,包括put()用于添加或更新键值对,get()用于根据键获取值,remove()用于删除键值对,以及clear()用于清除所有键值对。、
代码实例