240 likes | 505 Views
Java 语言基础. 初级基础. 操作符和赋值. 字节运算 byte b = 3; byte c = 8; byte e = 128;//… e = ( byte )128;//e 是多少 byte d = b+c;//d 的值是多少, cast d = c+5;//nc final int x = 4; int b = x++; //b=? e int c = ++x;// c=? e. 操作符和赋值. 引用赋值 class A { public A(){ print(“A”); } }
E N D
Java语言基础 初级基础
操作符和赋值 字节运算 byte b = 3; bytec = 8; byte e = 128;//… e = (byte)128;//e是多少 byte d = b+c;//d的值是多少,cast d = c+5;//nc final int x = 4; int b = x++; //b=? e int c = ++x;// c=? e
操作符和赋值 引用赋值 class A { public A(){ print(“A”); } } class B extends A{ public B(){ print(“B”); } public static void main(String[] args){ A a = new A();//输出什么 B b = new B();//输出什么 } } --------------------------------------------------------------------
操作符和赋值 Instanceof 判断一个对象是否是一个类的实例 interface M{} class A implements M{} class B extends A{} A a = new A(); B b = new B(); A c = new B(); A[] d = new A[2]; 考虑下列输出……………………………………………………………………………………………………….. a instanceof A // a instanceof M b instanceof A b instanceof B b instanceof M c instanceof A c instanceof B c instanceof M d instanceof A; d instanceof ? ==true
对象引用 Java里,对象传递只有一种形式,那就是传值,当把一个对象的变量传递进方法时,我们传递的是对象的引用 class Model{ public int width = 4; public int height = 5; public static void main(String[] args){ Model m = new Model(); p(m.height); m.modify(m); p(m.height); m.setModify(m); p(m.height); x = 4; m.remodify(x); p(x); } public void modify(Model m){
对象引用 m.height = m.height+5; m.width = m.width+3; } public void setModify(Model m){ m = new Model(); m.height+=7; } public void reModify(int x){ x+=5; } static void p(Object o){ System.out.println(o); } static void p(int i){ System.out.println(i); } }
对象,集合和构造函数 构造函数:如果用户未定义,则自动创建一个默认无参构造子,如果用户定义了构造函数,则调用用户定义的构造函数 class B extends A{} class A { int size; String name; public A(int s,String n){this.size=s;this.name=n;} public static void main(String[] args){ A a = new A(); A b = new A(2,”jack”); B x = new B(); } }
Object对象介绍 boolean equals(Object o) //对比两个对象是否相同 void finalize();//内存回收器回收对象前调用 int hashCode();//hash码,用于集合类 finalvoid notify();//唤醒等待该对象的线程 finalvoid notifyAll();//唤醒等待该对象的所有线程 final void wait();//让当前线程等待,直到另外一个线程在该对象上调用了上面两个方法 StringtoString();//返回代表该对象的字符串值
关于equals和hashCode 重点方法 equals 对比两个对象是否相同,java中由于不再直接操作内存地址,而是操作对象引用所以对象是否相同主要靠equals方法来对比 hashCode 代表对象的一个唯一整数 equals 返回true hashCode 一定相同 hashCode 相同,两个对象不一定equals
Equals和hashCode重写的例子 class A { private int m=0; public int getM(){return m;} A (int n){m=n;} public boolean equals(Object o){ if((o instanceof A) && (((A)o).getM()==this.m)){ return true; } else return false; } } public class EqualsTest{ public static void main(Stirng args[]){ A a1 = new A(2); A a2 = new A(3); a1.equals(a2);//?? a2.equals(a1);//?? } }
常用集合特征 List 这种集合是java对列表的实现,可以存放对象 有顺序存放 ArrayList 具有数组特征的集合,他主要用于对集合中对象随机访问的需要 LinkedList 具有链表特征的列表集合,它主要是针对插入删除频率高的列表访问
常用集合 Set 特征:不能存放重复的对象,鉴定方式equals,没有顺序,按照一定规则排序 HashSet 用对象的hashcode值检测对象,由于是基于hashcode的,因此查找速度快 TreeSet 具有顺序的集合,自动排序
常用集合类 Map 键值对容器,存放一个集合按照一定的顺序 根据键值取出对象. HashMap 查找快 TreeMap 自动排序 集合接口的compareTo方法 public int compareTo(Object o1,Object o2) 主要用来对集合排序,当输出集合需要按照一定的业务逻辑排序的时候,需要重写此方法
流控制语句的特点 switch语句和break语句 java的switch 语句只能接受int及其下类型的参数 试看下面代码 int x ; private seleX(x){ switch(x){ case 0:print(0); case 1:print(1); case 2:print(2); case 3:print(3); defaut:; } } x=2;seleX(x); x=3;seleX(x);
Break和continue语句 break 中断过程执行 continue用在循环中,终止此次循环,继续下次循环. 没有标号的循环语句 for(int i=0;i<3;i++){ print(i); for(int j=0;j<3;j++){ print(j); if(i%2==0)continue; } } 标号的循环语句 outer: for(int i=0;i<10;i++){ while(i>7){ print(“hello”); break outer; } print(“outter loop”); } print(“good-bye”);
Break和continue语句 --------------------------------------------------- 0 0 1 2 1 0 1 2 2 0 1 2 ------------------------------------------------------- hello good-bye
异常处理 一 异常介绍 JAVA语言的异常根对象是Throwable(相对的说法,因为所有JAVA对象的根都是java.lang.Object). 所有的异常都必须直接或者间接继承Throwable. Throwable 有两个子类,Error和Exception.Error通常用于严重的系统级别错误,比如IO错误、JVM底层错误等。对于应用程序,通常关注的是Exception。 JAVA将Exception分为两类,CheckedException和UncheckedException.从异常的层次来看,所有直接或者间接继承RuntimeException的异常,都属于UncheckedException.而所有直接或者间接继承Exception(这里不包含RuntimeException,所以其也是Exception的直接子类)的异常都属于CheckedException.对于抛出CheckedException的方法,JVM要求调用该方法的客户端必须显式地处理该异常(重新抛出,或者捕获它)。对于UncheckedException,JVM不作这方面的强制要求,如果调用者没有显式处理异常,则该异常将自动隐式地抛出。
异常处理程序 1 OutputStreamWriter out = ... 2 java.sql.Connection conn = ... 3 try { 4 Statement stat = conn.createStatement(); 5 ResultSet rs = stat.executeQuery( 6 "select uid, name from user"); 7 while (rs.next()) 8 { 9 out.println("ID:" + rs.getString("uid") 10 ",姓名:" + rs.getString("name")); 11 } 12 conn.close(); 13 out.close(); 14 } 15 catch(Exception ex) 16 { 17 ex.printStackTrace(); 18 }
异常声明 方法声明 public void myMethod() throws SomeException,AnyException; 语句块调用声明 try{ //可能抛出异常的操作 }catch(ExceptionA e){ //处理异常 }catch(ExceptionB e){ //处理异常 }….. 显式抛出异常 public void setName(String name){ if(name==null) throw new NameNotBeNullException(“用户名不能空”); //………………. }
常用的异常处理方式 1、处理异常。针对该异常采取一些行动,例如修正问题、提醒某个人或进行其他一些处理,要根据具体的情形确定应该采取的动作。再次说明,调用printStackTrace算不上已经“处理好了异常”。 2、重新抛出异常。处理异常的代码在分析异常之后,认为自己不能处理它,重新抛出异常也不失为一种选择。 3、把该异常转换成另一种异常。大多数情况下,这是指把一个低级的异常转换成应用级的异常(其含义更容易被用户了解的异常)。 4、不要捕获异常。
比较完备的异常处理程序 OutputStreamWriter out = ... java.sql.Connection conn = ... try { Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery( "select uid, name from user"); while (rs.next()) { out.println("ID:" + rs.getString("uid") + ",姓名: " + rs.getString("name")); } } catch(SQLException sqlex) { out.println("警告:数据不完整"); throw new ApplicationException("读取数据时出现SQL错误", sqlex); } catch(IOException ioex) { throw new ApplicationException("写入数据时出现IO错误", ioex); } finally { if (conn != null) { try { conn.close(); } catch(SQLException sqlex2) { System.err(this.getClass().getName() + ".mymethod - 不能关闭数据库连接: " + sqlex2.toString()); } } if (out != null) { try { out.close(); } catch(IOException ioex2) { System.err(this.getClass().getName() + ".mymethod - 不能关闭输出文件" + ioex2.toString()); } } }