JAVASE基础(十二)

一、异常

———| Throwable 所有错误与异常的父类
—————| Error 错误,错误一般都是由于jvm或者是硬件引发的问题。一般都不会通过代码
处理错误。
—————| Exception 异常, 异常我们是需要通过代码去处理的。

1、处理方式一

方式一: try-catch块的处理方式 捕获处理

    格式:
        try{

            可能会发生异常的代码

        }catch(异常类型 变量名){
            处理异常的代码。。
        }

捕获处理要注意的细节:
    1. 如果一个try块中出现了异常代码经过处理之后,那么try-catch块外面的代码可以正常的执行。
    2. 如果一个try块中出现了异常的代码,那么在一个try块中出现异常代码后面的代码无法正常执行。
    3. 一个try块后面可以跟有多个catch块,也就是说一个块可以捕获多种异常的类型。
    4. 一个try块后面可以跟有多个catch块,但是捕获的异常类型必须按照从小到大进行捕获。

2.异常的处理方式2:

    抛出处理. (throw 、 throws)

抛出处理要注意的细节:
1. 如果一个方法的内部抛出了一个编译时异常对象,那么必须 要在方法声明抛出。
2. 如果调用了一个声明抛出编译时异常类型的方法,那么调用者必须要进行处理,否则编译报错。
3. 一个方法如果遇到了throw关键字,那么该方法会马上停止执行。
4. 在一个种情况下只能抛出一种异常对象。

throw 与 throws的区别:
1. throw关键字是用于在一个方法的内部抛出异常对象的,throws是用于在方法上声明抛出异常类型的。
2. throw关键字后面跟的是一个异常的对象,throws后面跟的是异常的类型。
3. throw关键字一次只能抛出一个异常对象,throws一次可以声明抛出多种异常类型。

class Demo2 
{
    public static void main(String[] args) 
    {
        try{
            div(4,0,null);
        }catch(Exception e){
            System.out.println("哎呀,出错了...");
        }
    }

    public static void div(int a , int b,int[] arr) throws Exception ,NullPointerException{
        if(b==0){
            throw new Exception();//抛出一个异常对象。
        }else if(arr==null){
            throw new NullPointerException();
        }
        int c  = a/b;
        System.out.println("结果:"+ c);
    }
}

3.finally 块

finally块的使用前提: 必须要配合try块使用,不能单独使用。

finally块的代码在任何情况下都可以执行,只有在jvm退出的情况才不会执行。

try块的表现形式就有三种:

方式1: 适用于没有资源文件释放,只需要处理异常的代码使用。
      try{ 
          可能发生异常的代码 
      } catch( 异常类的类型 e){
        异常的处理代码..
      } 

方式2: 适用于既有资源释放也需要处理异常的代码去使用。

     try{ 
          可能发生异常的代码 
      } catch( 异常类的类型 e){
        异常的处理代码..
      } finally{
         释放资源的代码;
      }

方式3: 只需要 释放资源文件,不需要处理异常的代码去使用
    try{ 
          可能发生异常的代码 
      } finally{
         释放资源的代码;
      }

二、eclipse快捷键

alt + /             内部补全   

ctrl + 1                自动修复

ctrl + shift + f        代码格式化

alt + 上下方向键                代码移动

ctrl + shift + x                转大写

ctrl + shift + y                转小写

ctrl+ shift + /                  添加多行注释

ctrl + shift + \                取消多行注释

ctrl + /                       添加取消单行注释。

ctrl + d                      删除当前行代码

设置自定义快捷键:

window ----------- > preference -----------keys ------------>getter |  const

三、Object 类:

Object类是所有类的终极父类。

Object类常用的方法:
toString() 返回的字符串是用于描述该对象的
equals(Object obj) 判断两个对象是否为同一个对象, 默认比较 的是内存地址。
hashCode() 返回一个对象的哈希码值。哈希码 值可以看做一个对象的内存地址。

java规范: 一般我们在重写equals方法的时候,我们都会重写hashCode方法.

为什么要重写toString方法?
因为直接输出一个user对象的时候输出的是该对象的toString方法返回 的字符串,该字符串是Object的toString方法返回的不能满足我目前的需求,所以则进行了重写。

class User{

    int id;

    String userName;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public User(int id, String userName) {
        super();
        this.id = id;
        this.userName = userName;
    }

    @Override
    public String toString() {
        return "身份证:"+ this.id+" 姓名:"+ this.userName;
    }

    //如果一个人的身份证编号一致,那么则为同一个人。
    @Override
    public boolean equals(Object obj) {
        User user = (User)obj;
        return this.id== user.id;
    }


    @Override
    public int hashCode() {
        return this.id;
    }

}

public class Demo1 {

    public static void main(String[] args) {
        /*
        Object o = new Object();
        System.out.println("toString: "+ o.toString());  //默认情况返回的字符串:完整类名+ @+ 哈希码
        System.out.println(o); //疑问: 直接输出一个对象的时候输出的字符串竟然与toString方法返回的字符串一致?


        User user = new User("admin","123");
        System.out.println(user); //直接输出一个对象,其实就是输出该对象的toString方法返回的字符串。
        User user2 = new User("guest","root");
        System.out.println(user2);

        但是在现实生活中,如果一个人的身份证编号一致,那么则为同一个人。
        */
        User user1 = new User(110,"狗娃");
        User user2 = new User(110,"陈福狗");
        System.out.println("是同一个对象吗?"+ user1.equals(user2));
        System.out.println("哈希码1:"+ user1.hashCode());
        System.out.println("哈希码2:"+ user2.hashCode());
    }

四、String 类

public class Demo1 {

    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "hello";
        String str3 = new String("hello");
        String str4 = new String("hello");

        System.out.println("str1==str2?"+(str1==str2));                 //true      
        System.out.println("str2==str3?"+(str2==str3));                 //false  
        System.out.println("str3==str4?"+(str3==str4));                 // false  
        System.out.println("str2.equals(str3)?"+(str2.equals(str3)));  // true
        System.out.println("str3.equals(str4)?"+(str3.equals(str4)));  //true
        /*
         String类已经重写了Object的equals方法,比较的是两个字符串的内容是否一致,如果一致
         则返回true,否则返回false

         */     
    }
}

String类的构造方法:
String()
String(byte[] bytes) 使用一个byte数组构建一个字符串 . byte数组存储的是字符对应的码值。
String(byte[] bytes, int offset, int length) 使用一个byte字节数组构建一个字符串对象,指定开始使用的位置索引值与使用的字符个数。
String(char[] value) 使用字符数组构建 一个字符串
String(char[] value, int offset, int count) 使用一个char字符数组构建一个字符串对象,并且指定开始使用的位置索引值与使用的字符个数。
String(“字符串”)

总结: 使用字节数组与字符数组是可以构建一个字符串对象的。

获取方法
int length() 获取字符串的长度
char charAt(int index) 获取特定位置的字符 (角标越界)
int indexOf(String str) 获取特定字符的位置(overload)
int lastIndexOf(int ch) 获取最后一个字符的位置

public class Demo3 {

    public static void main(String[] args) {
        String str  = "中国人abc美国人abc";
        System.out.println("获取字符的个数:"+ str.length());
        System.out.println("指定索引值查找字符:"+ str.charAt(2));
        System.out.println("查找指定字符串第一次出现的索引值:"+ str.indexOf("abc"));
        System.out.println("查找指定字符串最后一次出现的索引值:"+ str.lastIndexOf("abc"));
    }

}

判断方法
boolean endsWith(String str) 是否以指定字符结束
boolean isEmpty()是否长度为0 如:“” null V1.6
boolean contains(CharSequences) 是否包含指定序列 应用:搜索
boolean equals(Object anObject) 是否相等
boolean equalsIgnoreCase(String anotherString) 忽略大小写是否相等

转换的方法;
char[] toCharArray() 将字符串转换为字符数组
getBytes(); 把字符串转换字节数组

public class Demo4 {

    public static void main(String[] args) {
        /*
        String str = "Demo1.java";
        System.out.println("是否以指定的字符结束:"+ str.endsWith("java"));
        str = "";
        System.out.println("判断指定的字符是否为空内容:"+ str.isEmpty());
        str = "hello java";
        System.out.println("判断字符串是否包含指定的字符:"+ str.contains("hel "));

        //str = null;
        System.out.println("判断的内容是否一致:"+ "HELLO JAVA".equals(str));
        System.out.println("忽略大小写比较的内容是否一致:"+ "HELLO JAVA".equalsIgnoreCase(str));
        */

        String str = "Demo1";
        char[] arr = str.toCharArray(); //把字符串转换一个字符数组
        System.out.println("字符数组的元素:"+ Arrays.toString(arr));
        byte[] buf = str.getBytes();
        System.out.println("字节数组 的元素:"+ Arrays.toString(buf));  
    }

其他方法
String replace(char oldChar, char newChar) 替换
String[] split(String regex) 切割
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)截取字串
String toUpperCase() 转大写
String toLowerCase() 转小写
String trim() 去除空格

public class Demo5 {

    public static void main(String[] args) {
        String str  =  "hello world";
        System.out.println("替换的方法:"+ str.replace("world","大家"));

        str = "你们-大家-下午好";
        String[] datas = str.split("-"); // 指定分隔符进行切割。
        System.out.println("字符串数组 的内容:"+ Arrays.toString(datas));

        str = "hello java";
        System.out.println("指定开始的索引值截取字符串:"+ str.substring(6));
        System.out.println("指定开始与结束的索引值截取字符串:"+ str.substring(6, 8)); // 注意 : 截取的位置是从startIndex开始,末尾是endIndex-1(包头不包尾)

        str = "大家好";
        System.out.println("转大写:"+ str.toUpperCase());
        str = "aBC";
        System.out.println("转小写:"+ str.toLowerCase());

        str = "      大家今晚         要考试                                              ";
        System.out.println("清除首尾的空格:"+str.trim());


    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值