【JAVADAY9、常见的8个类的使用】
JAVA-DAY9
- 三種注解
- override
- deprecated
- suppresswarning
- JDK的元注解(了解即可)
- 課堂作業(yè)
- static的應用
- static的應用2
- 抽象類的應用
- 異常
- 空指針異常
- 數(shù)學運算異常
- 數(shù)組下標越界異常
- 類型轉(zhuǎn)換異常
- 數(shù)字格式不正確異常
- 編譯異常
- 用異常來迫使用戶輸入你想要用戶輸入的類型
- 1、內(nèi)部類
- 1.1、成員內(nèi)部類
- 1.2、靜態(tài)內(nèi)部類 (static)
- 1.3、局部內(nèi)部類
- 1.4、匿名內(nèi)部類
- 2、Object類
- 3、Object類常用方法
- 1、getClass()方法
- 2、hashCode()方法
- 3、toString()方法
- 4、equals()方法
- 5、finalize()方法
三種注解
override
放在方法前面,表明此方法是一個重寫的方法deprecated
修飾類,表明該類已過時,修飾字段,字段過時,修飾方法,方法過時...suppresswarning
抑制編譯警告:寫在你想要不提示警告信息的地方,里面的參數(shù),如果你寫all那么就是全部不提示警告。JDK的元注解(了解即可)
課堂作業(yè)
static的應用
- 如果你用static修飾變量,那么這個類會把這個變量的值保存起來。
static的應用2
package exmap;@SuppressWarnings({"all"}) public class HomeWork02 {public static void main(String[] args) {//體會是不是每次都是加100System.out.println(Frock.getNextNum());System.out.println(Frock.getNextNum());Frock frock1 = new Frock();Frock frock2 = new Frock();Frock frock3 = new Frock();System.out.println(frock1.getSeriaiNumber());System.out.println(frock2.getSeriaiNumber());System.out.println(frock3.getSeriaiNumber());} } @SuppressWarnings({"all"}) class Frock{private static int cuttentNum=100000;//序號起始值int seriaiNumber;public int getSeriaiNumber() {return seriaiNumber;}public Frock() { //創(chuàng)建對象就會調(diào)用該構(gòu)造器,該構(gòu)造器又會調(diào)用getNextNum方法,然后靜態(tài)變量就會自加,然后靜態(tài)變量的值就會被賦給變量seriaiNumber seriaiNumber=getNextNum();}public static int getNextNum() {cuttentNum+=100;return cuttentNum;} }抽象類的應用
package exmap;public class HomeWork03 {public static void main(String[] args) {Animal cat=new Cat();cat.shout();Animal dog=new Dog();dog.shout();} } abstract class Animal{//抽象方法沒有方法體,后續(xù)類想要繼承該類,必須重寫該方法abstract public void shout();} class Cat extends Animal{@Overridepublic void shout() {System.out.println("貓會喵喵叫");} } class Dog extends Animal{@Overridepublic void shout() {System.out.println("狗會汪汪叫");} }異常
空指針異常
![package Exception012.Arithmetic;public class yichang1 {public static void main(String[] args) {String name="";System.out.println(name.length());} } 報錯: Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "name" is nullat Exception012.Arithmetic.yichang1.main(yichang1.java:6)進程已結(jié)束,退出代碼1數(shù)學運算異常
package Exception012.Arithmetic;import javax.swing.*;public class Exception01 {public static void main(String[] args) {int num=10;int num2=0;try {int e=num/num2;} catch (Exception ex) {System.out.println("異常類型"+ex.getMessage());}//程序會報錯,java提供了一個異常處理機制try catch//如果你認為e這里可能會出現(xiàn)錯誤就選中//使用CTRL+ALT+T//捕獲之后,即使那里出現(xiàn)了異常//程序仍然會向下執(zhí)行System.out.println("程序退出");} } 結(jié)果: 異常類型/ by zero 程序退出進程已結(jié)束,退出代碼0數(shù)組下標越界異常
package Exception012.Arithmetic;public class yichang2 {public static void main(String[] args) {int arr[]={1,2,3};for (int i = 0; i < 4; i++) {System.out.println(arr[i]);}} } 結(jié)果: **Exception** in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3at Exception012.Arithmetic.yichang2.main(yichang2.java:7) 1 2 3進程已結(jié)束,退出代碼1類型轉(zhuǎn)換異常
把b轉(zhuǎn)c肯定是不行,因為b和c本身沒有任何關(guān)系,會異常。數(shù)字格式不正確異常
比如 string n=“同學”; //把string轉(zhuǎn)換成Int 顯然是不行的 會拋出異常int a=Integer.parseInt(n);編譯異常
只要有finally 即使catch了異常但是程序仍然要把catch執(zhí)行完畢。
雖然有retrun 3 但是它不會返回,因為程序還要執(zhí)行finally所以最終返回4
沒有return會臨時創(chuàng)建變量保存3,等程序運行完在返回
用異常來迫使用戶輸入你想要用戶輸入的類型
1、內(nèi)部類
Inner Class:內(nèi)部類
一個類的內(nèi)部再定義一個完整的類;
class waibulei{
class neibulei{
}
為什么要定義內(nèi)部類?
例如身體和手,手是身體的一部分;
內(nèi)部類也會生成class文件:外部類名&內(nèi)部類名.class
特點:
編譯之后可生成獨立的字節(jié)碼文件(class文件)
內(nèi)部類可直接訪問外部類的私有成員,而不破壞封裝;
可為外部類提供必要的內(nèi)部功能組件;
1.1、成員內(nèi)部類
在類的內(nèi)部定義,與實例變量、實例方法同級別的類
外部類的一個實例部分,創(chuàng)建內(nèi)部類對象時,必須依賴外部類對象;
當外部類、內(nèi)部類存在重名屬性時,會優(yōu)先訪問內(nèi)部類屬性;
成員內(nèi)部類不能定義靜態(tài)成員,可以包含靜態(tài)常量final;
//外部類
public class class01 {
private String name = “tom”;
private int age = 20;
}
public class Test01 {
public static void main(String[] args) {
//1、創(chuàng)建外部類對象
class01 class01 = new class01();
//2、創(chuàng)建內(nèi)部類對象
com.feng.InnerClass.class01.Inner inner = class01.new Inner();
}
1.2、靜態(tài)內(nèi)部類 (static)
不依賴外部類對象,可直接創(chuàng)建或通過類名訪問,可聲明靜態(tài)成員;(不需要先創(chuàng)建外部類)
可包含靜態(tài)成員;(相當于一個外部類)
只能直接訪問外部類的靜態(tài)成員(實例成員需實例化外部類對象)
只有內(nèi)部類才能用static修飾,外部類不行;
public class class02 {
private String name = “tom”;
private int age = 20;
}
public class Test02 {
public static void main(String[] args) {
//直接創(chuàng)建靜態(tài)內(nèi)部類對象
class02.Inner inner = new class02.Inner();
//調(diào)用方法
inner.show();
}
}
1.3、局部內(nèi)部類
把一個類定義在方法的內(nèi)部,這個類就叫內(nèi)部類
定義在外部類方法中,作用范圍和創(chuàng)建對象范圍僅限于當前方法;
局部內(nèi)部類訪問外部類當前方法中的局部變量時,因為無法保障變量的生命周期與自身相同,變量必須修飾為final;
限制類的使用范圍;
不能定義靜態(tài)變量;
public class class03 {
private String name = “tom”;
private int age = 20;
}
public class Test03 {
public static void main(String[] args) {
//要在show方法里創(chuàng)建局部內(nèi)部類對象,不然沒有返回任何結(jié)果,因為show()只是創(chuàng)建了一個值而已;
class03 class03 = new class03();
class03.show();
}
1.4、匿名內(nèi)部類
沒有名字的內(nèi)部類
沒有類名的局部內(nèi)部類(一切特征都與局部內(nèi)部類相同)
必須繼承一個父類或者實現(xiàn)一個接口;
定義類、實現(xiàn)類、創(chuàng)建對象的語法合并,只能創(chuàng)建一個該類的對象;
優(yōu)點:減少代碼量
缺點:可讀性較差
public interface Usb {
void service();//前面默認了一個public
}
public class Mouse implements Usb {
@Override
public void service() {
System.out.println(“連接電腦成功,鼠標開啟工作…”);
}
}
public class TestUsb {
public static void main(String[] args) {
//創(chuàng)建接口類型的變量
// Usb usb = new Mouse();
// usb.service();
// class Fan implements Usb{
// @Override
// public void service() {
// System.out.println(“連接電腦成功,鼠標開啟工作…”);
// }
// }
// //使用局部內(nèi)部類創(chuàng)建對象
// Usb usb1 = new Fan();
// usb1.service();
}
2、Object類
所以類的父類,我們寫的所有類,在特殊情況下都是默認繼承了object類
超類、基類,所有類的直接或間接父類,位于繼承樹的最頂層;
任何類,如沒有書寫extends顯示繼承某個類,都默認直接繼承object類,否則為間接繼承;
object類中所定義的方法,是所有對象都具備的方法;
object類型可以存儲任何對象
作為參考,可接受任何對象
作為返回值,可返回任何對象
3、Object類常用方法
1、getClass()方法
public final Class<> getClass(){}
//返回引用中存儲的實際對象類型
//應用:通常用于判斷兩個引用中實際存儲對象類型是否一致
2、hashCode()方法
public int hashCode(){}
//返回該對象的哈希碼值
//哈希值根據(jù)對象的地址或字符串或數(shù)字使用hash算法計算出來的int類型的數(shù)值
//一般情況下相同對象返回相同哈希碼
3、toString()方法
public String toString(){}
//返回該對象的字符串表示(表示形式)
//可以根據(jù)程序需求覆蓋該方法,如:展示對象各個屬性值
4、equals()方法
public Boolean equals(Object obj){}
//默認實現(xiàn)為(this == obj),比較兩個對象地址是否相同
//可進行覆蓋,比較兩個對象的內(nèi)容是否相同
//比較兩個引用是否指向同一個對象
//判斷obj是否為null
//判斷兩個引用指向的實際對象類型是否一致
//強制類型轉(zhuǎn)換
//依次比較各個屬性值是否相同
5、finalize()方法
//當對象被判定為垃圾對象時,由JVM自動調(diào)用此方法,用以標記垃圾對象,進入回收隊列;
//垃圾對象:沒有有效引用指向此對象時,為垃圾對象;
//垃圾回收:有GC銷毀垃圾對象,釋放數(shù)據(jù)存儲空間;
//自動回收機制:JVM的內(nèi)存耗盡,一次性回收所有垃圾對象;
//手動回收機制:使用System.gc();通知JVM執(zhí)行垃圾回收;
String常用方法
public class Demo01 {public static void main(String[] args) {String name = "hello";//hello常量存儲在字符池中name = "zhangsan";//zhangsan賦值給name變量,給字符串賦值時,并沒有修改數(shù)據(jù),而是重新開劈一個空間(不可變性)String name2 = "zhangsan";//在字符串池中尋找有沒有zhangsan這個值,有的話,直接賦給name2,這時name和name2棧空間地址相同(字符串共享) //字符串的另一種創(chuàng)建方式String str = new String("java");String str2 = new String("java");System.out.println(str == str2);//falseSystem.out.println(str.equals(str2));//trueSystem.out.println("=============================");//字符串方法的使用//1、length();返回字符串的長度//2、charAt(int index);返回某個位置的字段//3、contains(String str);判斷是否包含某個字符串String content = "java是世界上最好的編程語言java";System.out.println(content.length());System.out.println(content.charAt(content.length()-1));System.out.println(content.contains("java"));System.out.println(content.contains("php"));System.out.println("=============================");//4、toCharArray();返回字符串對應的數(shù)組//5、indexOf();返回字符串首次出現(xiàn)的位置//6、lastIndexOf();返回字符串最后一次出現(xiàn)的位置System.out.println(content.toCharArray());System.out.println(Arrays.toString(content.toCharArray()));//數(shù)組編程字符串System.out.println(content.indexOf("語言"));System.out.println(content.indexOf("java",14));//從下標14開始找System.out.println(content.lastIndexOf("java"));System.out.println("=========================");//7、trim();去掉字符串前后的空格//8、toUpperCase();把小寫轉(zhuǎn)換成大小;toLowerCase();把大寫轉(zhuǎn)換成小寫//9、endWith(str);判斷是否已str結(jié)尾,starWith(str);判斷是否已str開頭String content2 = " Hello World ";String content3 = "Hello World";System.out.println(content2);System.out.println(content2.trim());System.out.println(content2.toUpperCase());System.out.println(content2.toLowerCase());System.out.println(content3.endsWith("World"));System.out.println(content3.startsWith("Hello"));System.out.println("=================================");//10、replace(char old,char new);用新的字符或字符串替換舊的字符或字符串//11、split();對字符串進行拆分System.out.println(content.replace("java","php"));System.out.println(content.replace("java","easy java"));//在java面前插入一個easyString say = "java is teh best programing language,java"; // String[] arr = say.split(" ");//表示遇到空格進行拆分//String[] arr = say.split("[ ,]");//表示空格和逗號String[] arr = say.split("[ ,]+");//表示空格和逗號可以出現(xiàn)多個System.out.println(arr.length);for (String string : arr){System.out.println(string);}//補充兩個方法equals、compareTo();比較大小System.out.println("=======================");String s1 = "hello";String s2 = "HELLO";System.out.println(s1.equalsIgnoreCase(s2));//equalsIgnoreCase:忽略大小寫比較大小String s3 = "abc";//a:97String s4 = "xyz";//x:120System.out.println(s3.compareTo(s4));//-23String s5 = "abc";//abc:3個String s6 = "abcxyz";//abcxyz:6個System.out.println(s5.compareTo(s6));//-3} } public class Demo02 {public static void main(String[] args) {String str = "this is a text";//將str中的單詞單獨獲取出來String[] arr = str.split(" ");for (String s : arr){System.out.println(s);}//將str中間的text替換成java;replace:代替System.out.println("==========================");String str2 = str.replace("text","java");System.out.println(str2);//在text前面插入easySystem.out.println("=========================");String str3 = str.replace("text","easy text");System.out.println(str3);//將每個單詞的首字母改為大寫System.out.println("==========================");for (int i = 0; i < arr.length; i++) {char first = arr[i].charAt(0);//把第一個字符轉(zhuǎn)換成大寫char upperfirst = Character.toUpperCase(first);String news = upperfirst + arr[i].substring(1);System.out.print(news+" ");}} } StringBuffer和StringBuilder public class Demo03 {public static void main(String[] args) {//StringBuffer和StringBuilder的使用,//和String的區(qū)別(1)效率比String高(2)比String節(jié)省內(nèi)存//StringBuild功能和StringBuffer一樣,將下面這個StringBuffer換成StringBuild就行StringBuffer sb = new StringBuffer();//1、append();追加sb.append("java是最好的編程語言");System.out.println(sb.toString());sb.append("java真好");System.out.println(sb.toString());sb.append("hello world");System.out.println(sb.toString());System.out.println("============================");//2、inset();添加sb.insert(0,"aaa");System.out.println(sb.toString());System.out.println("============================");//3、replace();替換sb.replace(0,5,"javascript");System.out.println(sb.toString());System.out.println("============================");//4、delete();刪除sb.delete(0,5);System.out.println(sb.toString());System.out.println("============================");//5、清空sb.delete(0,sb.length());System.out.println(sb.toString());} } public class Demo04 {public static void main(String[] args) {//驗證StringBuilder效率高于String//開始時間long start = System.currentTimeMillis();//String // String string = ""; // for (int i = 0; i < 99999; i++) { //用時:46881 // string += i; // } // System.out.println(string);//StringBuilderStringBuilder sb = new StringBuilder();for (int i = 0; i < 99999; i++) { //用時:100sb.append(i);}System.out.println(sb.toString());long end = System.currentTimeMillis();System.out.println("用時:"+(end-start));} } 6、BigDecimal類 需求精度比較高是使用的類public class Demo01 {public static void main(String[] args) {double b1 = 1.0;double b2 = 0.9;System.out.println(b1-b2);System.out.println("=======================");//面試題double result = (1.4-0.5)/0.9;System.out.println(result);System.out.println("======================");// BigDecimal,大的浮點數(shù)精確計算BigDecimal db1 = new BigDecimal("1.0");BigDecimal db2 = new BigDecimal("0.9");//減法BigDecimal r1 = db1.subtract(db2);System.out.println(r1);//加法BigDecimal r2 = db1.add(db2);System.out.println(r2);//乘法BigDecimal r3 = db1.multiply(db2);System.out.println(r3);//除法BigDecimal r4 = new BigDecimal("1.4").subtract(new BigDecimal("0.5")).divide(new BigDecimal("0.9"));System.out.println(r4);System.out.println("========================");//當數(shù)除不盡時可能會報錯 // BigDecimal r5 = new BigDecimal("10").divide(new BigDecimal(3)); // System.out.println(r5);BigDecimal r5 = new BigDecimal("10").divide(new BigDecimal(3),2,BigDecimal.ROUND_HALF_UP);//保留2位小數(shù),ROUND_HALF_UP四舍五入System.out.println(r5);} } 補充類 Data類 public class Demo01 {public static void main(String[] args) {//創(chuàng)建date對象//今天Date date1 = new Date();System.out.println(date1.toString());System.out.println(date1.toLocaleString());System.out.println("=======================");//昨天Date date2 = new Date(date1.getTime()-(60*60*24*1000));System.out.println(date2.toLocaleString());//方法after beforeboolean b1 = date1.after(date2);System.out.println(b1);boolean b2 = date1.before(date2);System.out.println(b2);System.out.println("===========================");//比較compareTo();int d = date2.compareTo(date1);System.out.println(d);//比較是否相等equalsboolean b3 = date1.equals(date2);System.out.println(b3);} } Calendar類public class Demo02 {public static void main(String[] args) {//創(chuàng)建Calendar對象Calendar calendar = Calendar.getInstance();System.out.println(calendar.getTime().toLocaleString());System.out.println(calendar.getTimeInMillis());System.out.println("===============================");//獲取時間信息//獲取年int year = calendar.get(Calendar.YEAR);//月int month = calendar.get(Calendar.MONTH);//MONTH是0~11,0代表1月//日int day = calendar.get(Calendar.DAY_OF_MONTH);//Date//小時int hour = calendar.get(Calendar.HOUR_OF_DAY);//HOUR是12小時的;HOUR_OF_DAY是24小時的//分int minute = calendar.get(Calendar.MINUTE);//秒int second = calendar.get(Calendar.SECOND);System.out.println(year+"年"+(month+1)+"月"+day+"日"+"\n"+hour+":"+minute+":"+second);System.out.println("=====================");//修改時間Calendar calendar2 = calendar.getInstance();calendar2.set(Calendar.DAY_OF_MONTH,5);System.out.println(calendar2.getTime().toLocaleString());//add方法修改時間calendar2.add(Calendar.HOUR,1);//加一個小時,減少時間就-System.out.println(calendar2.getTime().toLocaleString());System.out.println("====================================");//補充方法int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);int min = calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);System.out.println(max);System.out.println(min);} } SimpleDateFormat類public class Demo03 {public static void main(String[] args) throws Exception {//創(chuàng)建SimpleDateFormat對象 y年M月SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//創(chuàng)建DateDate date = new Date();//格式化date(把日期轉(zhuǎn)成字符串)String str = simpleDateFormat.format(date);System.out.println(str);System.out.println("=============================");//解析(把字符串轉(zhuǎn)成日期)Date date2 = simpleDateFormat.parse("1949/10/01 10:01:00");//這里要按照simpleDateFormat那里的格式System.out.println(date2);} } System類public class Demo04 {public static void main(String[] args) {//1、arraycopy:數(shù)組的復制//src:源數(shù)組//srcPos:從那個位置開始復制0//dest:目標數(shù)組//destPos:目標數(shù)組的位置//length:復制的長度int[] arr = {20,18,4,9,39,64,100,98};int[] dest = new int[8];System.arraycopy(arr,4,dest,0,4); //length的值只能小于等于srcPos的值;destPos從哪個位置開始存數(shù)據(jù)for (int i = 0; i < dest.length; i++) {System.out.println(dest[i]);}//Arrays.copyOf(original,newLength);System.out.println("===========================");//currentTimeMillis:可以計算程序運行的時間System.out.println(System.currentTimeMillis());//2、獲取毫秒數(shù)Long start = System.currentTimeMillis();for (int i = 0; i < 999999; i++) {for (int j=0;j<99999;j++){int re = i+j;}}Long end = System.currentTimeMillis();System.out.println("用時:"+(start-end));System.out.println("=========================");//類正在被使用,不回收 // Demo05 s1 = new Demo05("aaa",20); // Demo05 s2 = new Demo05("bbb",20); // Demo05 s3 = new Demo05("ccc",20);//類沒使用,被回收了new Demo05("aaa",20);new Demo05("bbb",20);new Demo05("ccc",20);//3、System.gc();告訴垃圾回收System.gc();System.out.println("===========================");//4、推出JVMSystem.exit(0);//下面就不會被執(zhí)行了System.out.println("程序結(jié)束了......");}總結(jié)
以上是生活随笔為你收集整理的【JAVADAY9、常见的8个类的使用】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 博客9-16CSS 三大特性
- 下一篇: 智慧农业智能节水灌溉 机井灌溉控制器