JAVA异常处理、常用类、反射、集合

异常

异常:在Java中是指被一个方法抛出的对象。

分类:检查异常、运行时异常、错误

  运行时异常(uncheckd):RuntimeException和其子类

  检查异常(checkd/搜检异常):指Exception和其子类,且不是RuntimeException的子类;它必须经过处理才会找到

 

语法:

try{//被保护的代码
}catch(异常的名称 e1){//捕获块
}

注意:应先捕获特殊再捕获一般异常;try没有出现异常catch将不会执行

 

异常处理的三种选择:

  1)捕获这个异常,不让他沿着调用栈继续向下抛出

  2)捕获这个异常,并继续向下抛出

  3)不捕获这个异常,从而导致方法调用栈中被弹出,导致对象抛出给调用栈下面的main()方法。

 

声明异常:

  关键字:throws  在当一个方法没有处理检查异常时使用

  例如:public void deposit(double amount) throws RuntimeException{}

抛出主动异常:

  关键字:throw   

  运行时异常可以不用声明异常,检查异常必须声明异常

 

final关键字:

  用于在try块后创建一个代码块,且他总会运行,不管异常是否发生

  注意:在方法返回之前,final块将会执行

 

用户自定义异常:

  1)所有的异常必须是Throwable的子类

   2)想编写一个会被异常自动处理过声明的规则的检查异常,就需要继承Exception类;

     3)如果编写一个运行时异常,就需要继承RuntimeException类

 

常用类

运行平台交互的类:

  System类:记录执行时间, 复制数组,确定当前系统的属性和获取获取系统环境变量等

  Runtime类:可以通过他的静态方法getRuntime()获取对象

 

String类:

  StringBuffer类:代表一个类容可变的字符串(方法是线程安全的)

  StringBuilder类:代表字符串对象,性能略高

 

Date类:

  DateFormat抽象类:方法返回特定地区格式的DateFormat对象

  SimpleDateFormat类:创建其对象时需要传入日期和时间格式作为格式化的模板

  Calendar抽象类

  GregorianCalendar类:公历日历

 

随机数:

  格式例如:生成0-10的随机数 

Random r=new Random();
int n1=r.nextInt();
n1=Math.abs(r.nextInt()%10);
System.out.println(n1);

装箱:基本类型 向 引用类型

拆箱:引用类型 向 基本类型

 

正则表达式:

  \;   ^(开始); $(结束);  *(0次或多次);  +(1次或多次);  ?(0次或一次);  {n}(重复n次);  {n,m}(最多m最少n);  .(出\n之外的任何单个字符);  x|y(x或y);

  [xyz](所包含的任意一个字符);;  [^xyz](未包含的任意字符);  [a-z](范围);  [^a-z](不在范围内);  \b(单词边界);  \B(非单词边界);  \d(一个数字字符);  \D(非数字);

  \f(换页);  \n(换行);  \r(回车);  \s(空白);  \S(非空白);  \w(下划线和任意字符); \W(非单词字符);

  正确使用:

    Pattern类:编译正则表达式,创建对象,先调该静态方法compile()返回一个Pattern对象

    Matcher类:解析Pattern,获得对象,调用Pattern对象的matcher()方法

    格式例如:

        

String name="y_123456";
Pattern p=Pattern 。compile(正则符);
Matcher m=p.matcher(name);
if(matcher.matches()){
}
else{
}

 

 

反射

Jvam中所包含提供的加载器:

  1)根类加载器:加载核心Java类(jiava.*开头)

  2)扩展类加载器:加载扩展的java类(java.*开头中JAR的类包)

  3)系统加载器:加载自身的类

 

类的加载机制:

  1)类的class文件读入内存中后,创建java.lang.util.class对象,一但某个被载入JVM中,同一个类就不会被再次输入

  2)连接:把类的二进制系统数据合并到JRE中

  3)初始化

 

反射:

  含义:可以在运行期载入,探知和使用编译期完全未知的类

  加载:class c=class.forname("全限定类名");

  查看所有方法:

Method[]  motheds=cl.getDeclaredMethods();for(Method me: motheds){System.out.println(me.getName());}

查看构造器:

        Constructor[] co=cl.getDeclaredConstructors();for(Constructor<?> con: co){System.out.println(con);}

获取字段:

         Field[] fields = clazz.getDeclaredFields();for (Field field : fields) {System.out.println(field.getType().getName() + " " +field.getName());}

创建对象:

1         Constructor<?> constructor = cl.getConstructor(String.class, Date.class);
2         SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd");
3         String st="2000-10-12";
4         Date da=s.parse(st);
5         Object obj = constructor.newInstance("张三",da);

调用方法:

1         Method setAddress = cl.getMethod("setAddress",String.class);
2         Object adress = setAddress.invoke(obj,"成都");
3         Method setSex=cl.getMethod("setSex",String.class);
4         Object sex=setSex.invoke(obj, "男");

...表示可变参数

 

Java集合框架

collection接口(控制单列数据):

  分为两个子接口:

    Set接口(没有顺序且不能重复):

      两个重要实现类:

        HashSet:基于哈希算法的set接口实现,没有顺序,不允许出现重复元素

        ThreeSet: 有顺序的

    List接口(有顺序,可以重复)

      两个重要实现类:

        ArrayList:是以数组方式实现,查询效率高,插入删除效率低

        LinkedList:是以链表方式实现,适合频繁增加删除元素时使用(速度快)

      重要方法:

        插入:对象名.add();        返回指定:对象名.get();          替换:对象名.set();         删除:对象名.remove();

      泛型:

         作用:1)保证在集合中元素类型安全;  2)数据类型不用强制转化

         实质:允许在定义接口、类时指定类型参数

         例如:ArrayList<Integer> al=new ArrayList<Integer>;

  Interator接口:用于遍历集合的接口,有一个iterator方法,返回Interator对象

    此接口方法:

      更多元素:hasNaxt();    下一个元素:nest();         删除iterator返回的最后一个元素:remove();

      格式:

 1     public static void main(String[] args) {
 2         MyComparator my=new MyComparator();
 3         List<SortObject> l=new ArrayList<SortObject>();        
 4         SortObject s1=new SortObject(1,4);
 5         SortObject s2=new SortObject(7,9);
 6         SortObject s3=new SortObject(5,6);
 7         l.add(s1);
 8         l.add(s2);
 9         l.add(s3);        
10         Collections.sort(l,my);
11         Iterator it = l.iterator();
12         while(it.hasNext()){            
13             Object obj = it.next();
14             System.out.println(obj);
15         }
16 
17     }
18 
19 }

 

Map接口(控制键值对):

  含义:对应的是一种从键(Key)到值(Value)的对应关系的集合(一对一)

  两个实现类:HashMap;  TreeMap;

  基本方法:

    返回指定键相关的值:get();   向映射中添加键值对: put();    删除所有元素:clear();   删除指定:remove();

 

辅助类CollectionsArrays

  Collections用于对集合元素进行排序、查询、修改(静态方法)

    例如排序:Collections.sort(list cmp);

  Arrays操作数组

    例如:Arrays.sort(arr);

 

集合当中用size获取数组长度  

 

转载于:https://www.cnblogs.com/wwg1426802735/p/4439147.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Base64 百科词条

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64&#xff0c;所以每6个位元为一个单元&#xff0c;对应某个可打印字符。三个字节有24个位元&#xff0c;对应于4个Base64单元&#xff0c;即3个字节需要用4个可打印字符来表示。它可用来作为电子…

java获取mysql执行计划_好程序员Java学习路线之MySQL的执行计划

好程序员Java学习路线之MySQL的执行计划。什么是执行计划&#xff1f;执行计划通常是开发者优化SQL语句的第一步。MySQL在解析SQL语句时&#xff0c;会生成多套执行方案&#xff0c;然后内部会进行一个成本的计算&#xff0c;然后通过优化器选择一个最优的方案执行&#xff0c;…

Web系统开发构架再思考-前后端的完全分离

前言 前后端完全分离其实一直是Web开发人员的梦想,也一直是我的梦想,遥想当年,无论是直接在代码里面输出HTML,还是在HTML里面嵌入各种代码,都不能让人感到满意.期间的痛苦和纠结,我想所有Web开发人员都深有感触. 由于最近几年一直在MS平台,从Web Form到MVC,MS平台虽然易用好学,…

C++程序设计基础

01 1 预编译常用的有&#xff0c;宏定义和包含库。2 库&#xff1a;是实用工具的集和&#xff0c;由程序员编写&#xff0c;可以完成一些特定的功能。3 <> 系统库 ""用户自定义库。4 宏定义&#xff1a;定义符号常量&#xff0c;符号常量就是给常量取的名字。常…

文科思维Java_开源之Processing:这好玩的编程语言是为文科生艺术家准备的

说起编程语言&#xff0c;我们很多时候第一反应就是很难&#xff0c;都是理工科计算机相关行业的人才学的&#xff0c;都是为理科生掉头发准备的。的确&#xff0c;计算机的严谨&#xff0c;注定要求开发应用的人有缜密的理工科的理性逻辑思维&#xff0c;然而一人客从另一方面…

第一章导言的笔记与思考

Writer&#xff1a;BYSocket&#xff08;泥沙砖瓦浆木匠&#xff09; 微博&#xff1a;BYSocket 豆瓣&#xff1a;BYSocket ~&#xff1a;较重要 ~~&#xff1a;重要 1.1 hello&#xff0c;world ~初学人来说还是一大障碍&#xff0c;手写编写程序文本&#xff0c;然后成功的进…

C 和 Object- C 中得 #ifdef 和#ifndef

很多宏是为了进行条件编译。一般情况下&#xff0c;源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译&#xff0c;也就是对一部分内容指定编译的条件&#xff0c;这就是“条件编译”。有时&#xff0c;希望当满足某条件时对一组语句进行编…

C语言基础小斋

一、C语言数据类型 ok&#xff0c;如我们所知&#xff0c;C语言作为大学工科专业的必学课程&#xff0c;其重要性不言而喻&#xff1b;它为我们提供了丰富的数据类型&#xff0c;所以它很适合程序员来编写 数据库 &#xff0c;如DB2、Oracale都是C语言编写的。 那么C语言具体又…

《Cracking the Coding Interview》——第11章:排序和搜索——题目8

2014-03-21 22:23 题目&#xff1a;假设你一开始有一个空数组&#xff0c;你在读入一些整数并将其插入到数组中&#xff0c;保证插入之后数组一直按升序排列。在读入的过程中&#xff0c;你还可以进行一种操作&#xff1a;查询某个值val是否存在于数组中&#xff0c;并给出这个…

gradle打包java项目_gradle打包java项目

转载地址&#xff1a;http://www.gfzj.us/series/gradle/2014/12/12/gradle%E5%B0%8F%E7%B3%BB%E5%88%97(4)--gradle%E6%89%93%E5%8C%85java%E9%A1%B9%E7%9B%AE.html以gradle小系列所举例子为示例&#xff0c;在此处介绍两种gradle发布java项目的方法&#xff1a;fat jar方式该…

堡垒机2.0

一、编辑系统环境变量&#xff0c;让用户登录后自动调用脚本 1 vim /etc/profile 2 python /baolei/ssh_login.py 3 # 判断登录用户是否为 root 用户&#xff0c;root用户退出程序不进行logout操作&#xff0c;否则则logout 4 if [ $? ! 10 ];then 5 echo "Good …

Flex中利用ByteArray与BitmapData互相转换实现图片的二进制保存与复原

Flex中利用ByteArray与BitmapData互相转换实现图片的二进制保存与复原 近 日在项目当中需要将图片保存到共享对象当中&#xff0c;开始用了俩天的时间做了对象的序列化&#xff0c;并以BitmapData的形式进行了图片的序列化保存共享&#xff0c;因为系统 没有提供更好的接口所以…

java8自定义收集器_使用自定义收集器进行Java 8分组?

我有以下课程。class Person {String name;LocalDate birthday;Sex gender;String emailAddress;public int getAge() {return birthday.until(IsoChronology.INSTANCE.dateNow()).getYears();}public String getName() {return name;}}我希望能够按年龄分组&#xff0c;然后收…

poj 1862 Stripies/优先队列

原题链接&#xff1a;http://poj.org/problem?id1862 简单题&#xff0c;贪心优先队列主要练习一下stl大根堆 写了几种实现方式写成类的形式还是要慢一些。。。 手打的heap&#xff1a; 1&#xff1a; 1 #include<cstdio>2 #include<cstdlib>3 #include<cmath&…

java url下载ics_使用Microsoft Graph API处理外部(Internet / .ics)日历URL

在新的Graph API中&#xff0c;是否可以根据外部.ics日历网址为用户创建新日历&#xff1f;我d like to do is to use a daemon to inject a link to an external calendar into the list of calendars a user has if they don已经有了这样一个链接 . 这将有效地复制用户可以在…

命令行生成jar文件

1.打开cmd&#xff0c;进入编译完后所有类的当前目录 命令行 jar -cvf javaname.jar *.class 这时已经生成了 javaname.jar 不过如果有多个类&#xff0c;双击打不开 2.解压javaname.jar 进入META-INF&#xff0c;编辑MANIFEST.MF: 尾行写入Main-Class:&#xff08;&…

Github链接地址

https://github.com/kzj1/test转载于:https://www.cnblogs.com/lalal/p/4456923.html

java foreach和for循环区别_java相关:老生常谈foreach(增强for循环)和for的区别

java相关&#xff1a;老生常谈foreach(增强for循环)和for的区别发布于 2020-8-18|复制链接下面小妖就为大家带来一篇老生常谈foreach(增强for循环)和for的区别。小妖觉得挺不错的&#xff0c;现在就分享给大家&#xff0c;也给大家做个参考。一起跟随小妖过来看看吧首先说一下f…

关于事件冒泡和捕获的问题

由于习惯于jquery的方便操作&#xff0c;往往让我们慢慢淡忘了原生js应有的功能和属性&#xff0c;今天重温一下事件冒泡和捕获问题。 冒泡&#xff1a;从内向外&#xff0c;如&#xff1a;div > body > html (不同浏览器稍有不同) 捕获&#xff1a;从外向内&#xff0c;…

root无法运行命令解决办法

今天运行一个命令wget(wg再使用tab键无法使用)&#xff0c;如下提示 -bash: /usr/bin/wget: 权限不够 [rootwww /]# ls -Z /usr/bin/wget-rw-r--r--. root root system_u:object_r:bin_t:s0 /usr/bin/wget发现没有执行权限 chmod x /usr/bin/wget -bash: /usr/bin/wget: …