?? java6.txt
字號:
sd 0804 Javaday6 2008年6月18日Review:abstract 未實現(xiàn) (抽象類可以修飾類,方法抽象類:無法被實例化,不能new+本類構造,但能new+子類抽象方法:沒有方法體,不允許直接調用interface 接口看作一種特殊的抽象類接口沒有構造,屬性都是public static final,所有的方法都是public abstract子類中重寫類 extends 類(單繼承)類 implements 接口(多繼承)接口 extends 接口(多繼承)private 本類無修飾 本類 本包protected本類 本包 可被子類繼承public 本類 本包(需導入) 子類 其他Objectfinalize 垃圾回收 JVM自動調用的方法clone()方法equals()比較對象是否相等 ==比較的是真實內存地址教室類作業(yè):------------------------------------------------------------------------------------------package com.tarena.day06;public abstract class Person {//abstract抽象類 Person private String name;//封裝屬性 private int age; public Person(){} //最好寫出無參構造 public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }------------------------------------------------------------------------------------------package com.tarena.day06;public class Student extends Person{//學生類繼承Person父類 private int id;//子類屬性 public int getId() { return id; } public void setId(int id) { this.id = id; }}------------------------------------------------------------------------------------------package com.tarena.day06;public class Teacher extends Person{//定Teachends類繼承petsin類 private double sal; public double getSal() { return sal; } public void setSal(double sal) { this.sal = sal; }}------------------------------------------------------------------------------------------package com.tarena.day06;public class Admin extends Person{//網(wǎng)絡管 private String adept; public String getAdept() { return adept; } public void setAdept(String adept) { this.adept = adept; } }------------------------------------------------------------------------------------------package com.tarena.day06;public final class ClassRoom {//final不可更改的教室類//沒有必要產(chǎn)生子類,所以加上final private final Student[] stu;//屬性 //數(shù)組 private static Teacher t; private static final Admin ADMIN = new Admin();//是常量 public ClassRoom(int i){ //確定人數(shù) if(i>0){//判斷 stu = new Student[i]; }else{ stu = null; } } public static Admin getADMIN() { return ADMIN; } public static Teacher getT() { return t; } public static void setT(Teacher t) { ClassRoom.t = t; } public static Admin getADMIN() {
return ADMIN;
} public Student[] getStu() { return stu; }} ------------------------------------------------------------------------------------------Java06toString 用String去描述一個對象------------------------------------------------------------------------------------------package com.tarena.day06.object;public class TestToString { @Override public String toString(){ //使用的時候最好重寫toString return "這是一個測試類"; } public static void main(String[] args) { TestToString tts = new TestToString(); System.out.println(tts.toString()); System.out.println(tts); //打印對象的時候會自動調用對象的toString方法 System.out.println(tts + "abc"); //在打印一個對象的時候或字符串連接的時候會自動調用toString() }}輸出結果:這是一個測試類這是一個測試類這是一個測試類abc------------------------------------------------------------------------------------------加法(+):兩種解釋:加法; 字符串連接: 1.加號兩端都是數(shù)字或是可以轉成數(shù)字(主要針對char)的時候都是按加法處理 2.只要一端是String 就按字符串連接處理 3.如果兩端沒有String,又不都是數(shù)字,那一定是非法的從語法上可以實現(xiàn) equals和hashcode不一致,規(guī)范上應該是一致的int+"" 將int型轉換成String類型如果想要把String類型轉換成int 就要用到封裝類**封裝類(Wrapper): 基本類型的對象化Integer: 1.對象化基本類型2.把一個String轉化成一個 int 常用的 static int parseInt(String) 將String字符串轉換成int------------------------------------------------------------------------------------------package com.tarena.day06.object;public class TestInteger { public static void main(String[] args) { Integer i1 = new Integer(2); Integer i2 = new Integer("2"); //只有這兩種效果 System.out.println(i1==i2); //new 了兩次所以地址不一樣,false System.out.println(i1.equals(i2));//equals被重寫了,比較的是值,所以結果是true int temp = Integer.parseInt("24");//字符串轉換成int,如果是"24a"就會報錯,這不是數(shù)字格式(十進制) System.out.println(temp); Integer i3 = 128;//5.0新特性,自動裝箱 Integer i4 = 128;//自動把int轉換為Integer int i5 = i3 + i4; //自動解箱,把Integer轉換成int,"+"兩端是int型 int i6 = new Integer(128); //自動解箱 System.out.println(i3==i4);//filse//Integer池超過了容量,所以這時候就在堆中new了一個新的,所以地址值不同了,如果是 -128~127則為true System.out.println(i3.equals(i4));//equals被重寫,所以比較的是值,這里是true System.out.println(i3==i6);//如果是自動裝箱就是false,自動解箱就是true,這里發(fā)生的是自動解箱 //Integer i7 = null; //int i8 = i7;//自動解箱在對象為空的時候會失敗,小心對象不能為空 double d = Double.parseDouble("24.34");//將字符串轉換成Double類型 }}輸出結果:falsetrue24 ------------------------------------------------------------------------------------------Integer 自動裝箱池 只應用自動裝箱的時候,這個池的大小是 -128~127,是以Integer[],長度是256,如果沒有超過-128~127那就不會new ,如果超過了就會new 一個新的在堆中StringString 是一組不可改變的unicode字符序列, String應用了一種不變模式,一個String的值不可能改變的,可以改變的是指針,雙引號的定義是字面值所有字面值都會放在常量池中------------------------------------------------------------------------------------------package com.tarena.day06.string;public class TestPool { public static void main(String[] args) { String s1 = new String("abc"); //在內存中生成一個對象 String s2 = new String("abc"); String s3 = "abc"; //在內存中生成兩個對象 String s4 = "abc"; System.out.println(s1==s2); System.out.println(s1.equals(s2)); System.out.println(s3==s4); System.out.println(s3.equals(s4)); String s5 = s3 +"d";//對字符串進行連接(+)的時候,結果不在池里 String s6 = "abcd"; System.out.println(s5==s6);//s5不在池里,地址一定不同 System.out.println(s5.equals(s6));//比較內容,所以是true }}------------------------------------------------------------------------------------------String API構造:String(byte[], int int) String(String)方法:1.startswith()以...開始 endswith()以...結束2.equals() 比較 /length() 長度3.replaceall() 替換4.split(String)拆分5.substring() 截取6.indexOf() 查找7.toLowCase()/toUpperCase() 改變大小寫8.trim() 首尾截空白9.matchs()匹配正則表達式10.byte[] new String String getBytes byte[]------------------------------------------------------------------------------------------package com.tarena.day06.string;public class TestString { public static void main(String[] args) { String s1 = "zhang,man,25"; String[] ss = s1.split(","); for (int i = 0; i < ss.length; i++) { System.out.println(ss[i]); } String s2 = " a b c "; //只去首尾5個空白 System.out.println(s2.trim().length()); String s3 = "abcdddabcdddabc"; //把所有abc的位置顯示出來 int index = 0; for (int i = 0; i < s3.length(); i++) { index = s3.indexOf("abc",index); if(index==-1)break; System.out.println(index++); } }}輸出結果:zhangman2550612------------------------------------------------------------------------------------------正則表達式:不僅僅為java服務,驗證用戶輸入的合理性[ ] 在[]選一個( ) 在( )內的視為一個整體 如:(com)| (com.net)a-z a到z所有小寫字母[a-z A-Z 0-9 _]字母,數(shù)字,下劃線\ 轉義字符| 或者\d 所有數(shù)字[0-9]\D 所有非數(shù)字\w 單詞里擁有的字符\W 非單詞字符[^ ] 中括號里如果有^ 代表非? 0-1個+ 1-n個* 0-n個{n} 正好n個{n,} >=n個{n,m} 大于等于n,小于等于m,雙閉區(qū)間[n,m]正則以^ 開頭 以$結尾 ------------------------------------------------------------------------------------------package com.tarena.day06.string;public class TestZz { public static void main(String[] args) { String name = "^[a-zA-Z0-9]{5,12}$"; //5-12位的字母數(shù)字下劃線做用戶名 String temp = "@zhang"; String zip = "\\d{6}"; // \\才是\ \d的時候可以不用^$ String temp1 = "100032"; String email = "^([a-zA-Z0-9_-])+[@]([a-zA-Z0-9_-|])+[.]((com)|(net)|(com.cn))$";//在中括號內的視為一個整體 String temp2 = "100086@sina.net"; if(temp.matches(name)){ System.out.println("輸入正確"); }else{ System.out.println("輸入錯誤"); } if(temp1.matches(zip)){ System.out.println("郵編輸入正確"); }else{ System.out.println("郵編輸入錯誤"); } if(temp2.matches(email)){ System.out.println("郵箱輸入正確"); }else{ System.out.println("郵箱輸入錯誤"); } }}輸出結果:輸入錯誤郵編輸入正確郵箱輸入正確------------------------------------------------------------------------------------------在String中與正則表達式相關的方法(如:split/replaceAll等),在遇到特殊字符串做參數(shù)的時候,注意轉義------------------------------------------------------------------------------------------package com.tarena.day06.string;public class Test { public static void main(String[] args) { String te = "1$2$3$4"; String[] re = te.split("\\$"); for (int i = 0; i < re.length; i++) { System.out.println(re[i]); } String a = te.replaceAll("\\$",","); System.out.println(a); }}輸出結果:12341,2,3,4------------------------------------------------------------------------------------------String的修改對于內存來說是非常大的開銷,所以就有一組可以改變的unicode字符序列,就引入StringBuffer,但后來在5.0后被替換成StringBuilderStringBuffer支持多人并行操作,但是效率比較低StringBuilder多人并行操作會出錯,但是效率比較高并行與串行并行:同時進行串行:一個接一個進行StringBuilder/Buffer1.構造:new 的時候傳參是String類型的2.append insert replace delete3.反轉:reverse() 容量:capacity()StringBuilder/StringBuffer調用方法時自身內容改變,而String調用方法的時候是不變的,想要改String除非重新賦值,否則無法修改------------------------------------------------------------------------------------------package com.tarena.day06.string;public class TestStringBuilder { public static void main(String[] args){ StringBuilder s1 = new StringBuilder("abc"); StringBuilder s3 = s1; //與s1指向同一個SrtingBuilder System.out.println(s1.length());//長度為3 System.out.println(s1.capacity());//容量是19 s1.append("d");//append追加到序列 s1.append("e"); StringBuilder s2 = s1.append("e"); System.out.println(s1.length());//長度變?yōu)? System.out.println(s1.capacity()); //容量還是19,沒有超過19,容量夠用 System.out.println(s1==s2); System.out.println(s3); String str = new String("abc"); str = str.substring(1); System.out.println(str); }}輸出結果:319619trueabcdeebc------------------------------------------------------------------------------------------作業(yè):String temp = "zhang,man,25,zhang$163.net;li,man,26,li@rr$wang,lady,21,wang@sina.com";要求拆分出人員信息,驗證人名和email是否符合要求,如果符合要求,放入對象中
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -