java初学小结(2)

面向对象深入和数组深入:

1.抽象类、接口、内部类、String类(常量池等)、String类常用方法、数组的拷贝(插入、删除元素等)、Arrays工具类的使用、多维数组、冒泡排序、二分法查找(没怎么用过)。

  • String常量池:

jdk1.6下字符串常量池是在永久区中,是与堆完全独立的两个空间。
jdk1.7,1.8下字符串常量池已经转移到堆中了,是堆中的一部分内容

String代码如下:

public static void main(String[] args) {
       String s1 = "hello";
       String s2 = "hello";
       String s3 = "he" + "llo";
       String s4 = "hel" + new String("lo");
       String s5 = new String("hello");
       String s6 = s5.intern();
       String s7 = "h";
       String s8 = "ello";
       String s9 = s7 + s8;
      System.out.println(s1==s2);//true
        System.out.println(s1==s3);//true
        System.out.println(s1==s4);//false
        System.out.println(s1==s9);//false
        System.out.println(s4==s5);//false
        System.out.println(s1==s6);//true
    }
  • 二分法查找(折半查找 算法)
public static void main(String[] args) throws MalformedURLException {
		 int[] arr = new int[] { 12, 23, 34, 45, 56, 67, 77, 89, 90 };
	       System.out.println(search(arr, 12));
	       System.out.println(search(arr, 45));
	       System.out.println(search(arr, 67));
	       System.out.println(search(arr, 89));
	       System.out.println(search(arr, 99));
	   }

	   public static int search(int[] arr, int key) {
	       int start = 0;
	       int end = arr.length - 1;
	       while (start <= end) {
	           int middle = (start + end) / 2;
	           if (key < arr[middle]) {
	               end = middle - 1;
	           } else if (key > arr[middle]) {
	               start = middle + 1;
	           } else {
	               return middle;
	           }
	       }
	       return -1;
	   }
	   

常用类
包装类、StringBuilder和StringBuffer用法(StringBuilder效率高于StringBuffer。Stringbuffer线程安全),Date时间类、DateFormat和SimpleFormat的使用(时间和字符串转换)、Calendar和GregorianCalendar的使用(日期计算)、File类、枚举的基本用法

枚举的使用:

  • 自定义函数:
public enum Color {
     
     RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
     
     
    private String name ;
    private int index ;
     
    private Color( String name , int index ){
        this.name = name ;
        this.index = index ;
    }
     
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getIndex() {
        return index;
    }
    public void setIndex(int index) {
        this.index = index;
    } 
}

public class B {
 
    public static void main(String[] args) {
 
        //输出某一枚举的值
        System.out.println( Color.RED.getName() );
        System.out.println( Color.RED.getIndex() );
 
        //遍历所有的枚举
        for( Color color : Color.values()){
            System.out.println( color + "  name: " + color.getName() + "  index: " + color.getIndex() );
        }
    }
}

结果


红色
1
RED name: 红色 index: 1
GREEN name: 绿色 index: 2
BLANK name: 白色 index: 3
YELLO name: 黄色 index: 4

异常机制:
异常机制、常见异常分类、异常处理(捕获异常)、异常处理(声明异常)、利用百度解决异常问题、手动抛出异常。

  • 异常类关系图:
    异常类关系图
    在Exception中,我们通常又将异常分为两类,RunTimeException和其他的异常。
    一句话来总结:运行异常是程序逻辑错误,无法预料,改正就可以,无需抛出或处理。非运行时异常是显然可能存在的错误,我们被强制必须抛出或处理来保证程序的安全性。

我们还可以自己创建一个自己定义的异常类。

/**
 * 
 * @author QuinnNorris
 * 
 *         自定义异常类
 */
public class MyException extends Exception {

    public MyException() {

    }

    public MyException(String msg) {
        super(msg);
    }

}

之后,我们要创建一个测试类,在这个测试类中我们会让一个方法手动的抛出一个异常。这种方法只是为了演示,在实际的情况下,异常对象地抛出都是因为我们的编译问题由编译器为我们抛出的。在我们用方法抛出一个异常后,我们会用try-catch块来自己接住这个异常。

/**
 * 
 * @author QuinnNorris
 * 
 *         测试类,用方法抛出异常
 */
public class TestExcep {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        try {
            throwMyExce();
        } catch (MyException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void throwMyExce() throws MyException {
        throw new MyException();
    }

}

详细异常资料参:https://blog.csdn.net/quinnnorris/article/details/57428399

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值