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.****.net/quinnnorris/article/details/57428399