java常用class类_java常用类
java常用類
內部類
1.成員內部類:在一個類的內部定義一個完整的類
例如:外部類public class Body{
內部類class Header{
}
}
內部類可以直接訪問外部類的私有成員,而且不破壞封裝
內部類可以為外部類提供必要的功能組件,
成員內部類 在類的內部定義,與實例變量,實例方法同級別的類,
在外部類的一個實例部分,創建內部類對象時,必須依賴外部類對象
Outer outer = new outer();
Inner inner = new Inter();
一步到位: Inner inner = new Outer().new Inner();
inner.show();
當外部類、內部類存在重命名屬性時、會優先訪問內部類屬性 例如(外部類 .this.屬性)
成員內部類不能定義靜態成員static、但可以定義靜態常量final。
private static final String name ="li";
private static String name ="li"; 錯誤
打印外部類屬性時 內部類屬性和外部類的名字相同,要想訪問外部類屬性Outer.this . name
靜態內部類
相當于在成員內部類的基礎上 加上一個static關鍵字 也當相當于外部類
不依賴外部類對象,可直接創建或通過類名訪問,可聲明靜態成員
packageaa;//外部類
public classOuter {private String name = "ww";//靜態內部類;和外部類相同
static classInner{private String address="上海";private String phone="888";//靜態成員
private static String maths = "數學";public voidshow() {//調用外部類的屬性//1.先創建外部類對象
Outer outer = newOuter();
System.out.print(outer.name);//調用靜態內部類屬性方法
System.out.print(address);//調用靜態內部類的靜態屬性
System.out.print(Inner.maths);
}
?
}
?
}
只能直接訪問外部類的靜態成員(實例化成員需實例化外部類對象)
Outer.Inner inner = new Outer.Inner();
Outer.Inner.show();
public classTestOuter {public static voidmain(String[] args) {
Outer.Inner inner= newOuter. Inner();
inner.show();
}
}
3.局部內部類 (定義在方法內的)
package com.jun.li.pritact;
//外部類
public class Outer {
private String name ="劉德華";
private int age =55;
public void show() {
// 定義局部變量、局部變量是不能帶修飾符的
String address = "上海";
//局部內部類 注意前面不能加任何訪問修飾符
class Inner{
//局部內部類的屬性
private String phone="19999999";
private String email="999999@.qq.com";
public void show2() {
//訪問外部類的屬性
System.out.println(Outer.this.name);
System.out.println(Outer.this.age);
System.out.println(address);
}
}
步驟(1) ?//在此方法內創建內部類對象
Inner inner = new Inner();
inner.show2();
}
}
package com.jun.li.pritact;
public class OuterTest {
public static void main(String[] args) {
Outer outer = new Outer();
outer.show();
//想運行show方法中的局部內部類 需只能在其方法內創建對象 上步驟 (1)
}
}
?
?
局部內部類訪問外部類當前方法中的局部變量時,因無法保障變量的生命周期與自身相同,
變量必須修飾為final final String address = "上海";
有限的范圍 當前方法內
4.匿名內部類(接口 抽象類用的多)
*沒有類名的局部內部類(一切特征都與局部內部類相同)
*繼承一個父類或者實現一個接口常使用
Usb usb = new Usb(){
//Usb()可以是父類,抽象類 再重寫方法就行
@Override
public void service(){
System.out.println("連接成功");
}
};
object類
超類、基類、所有類的直接或間接父類,位于繼承樹的頂層
任何類、沒有寫extends繼承某個類 都默認繼承Object類,否則間接繼承
Object類的所定義的方法,是所繼承對象都具備的
Object類可以存儲任何對象 1.作為參數:接收任何對象
2.作為返回值:可以返回任何對象
object類常用方法
1.getClass()方法 返回當前類的實際對象類型
應用:通話常用于判斷兩個引用中實際存儲對象類型是否一致
Class class1=s1.getclass();
Class class2=s2.getclass();
if(class1==class2){
System.out.print("相同類型")
}else{
System.out.print("不相同類型")
}
2.hashCode()方法 返回int類型
public int hashCode(){}
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());//s1與s2地址不同所以hash值不同
Student s3=s1 //把s1地址賦給s3 所以相同
System.out.println(s3.hashCode());//相同
返回哈希碼值、根據對象的地址或字符串或者數字使用hash算法計算出來的int類型的數值
3.toString()方法
eclipse中重寫方法 Alt+Enter+s
public String toString(){
return name+":"+age;
}
4.equals()方法 默認實現為(this==obj)。比較兩個對象地址是否相同。可覆蓋 為比較兩個對象的內容是否為相同、通過重寫。
重寫equals方法 改變equals的判斷條件方法
public class Outer {
@Override
public boolean equals(Object obj) {
//1.判斷兩個對象是否為同一個引用 一樣就不需要比ture
if(this==obj) {
return true;
}//2.判斷是否為空值
if(obj==null) {
return false;}//3.判斷是否為同一類型
//if(this.getClass()==obj.getClass()) {//}
if(obj instanceof Student ) {
//4.強制類型轉換
Student s =(Student)obj;
//5.比較屬性
if(this.name.equals(s.getName())&&this.age==s.getAge()) {
return true;
}
}
return false;
}
}
5.finalize()方法
當對象被判定為垃圾對象時 ,由JVM自動調用此方法,用于標記垃圾對象,計入回收隊列
垃圾對象:指沒有有效引用指向此對對象
垃圾回收:由GC銷毀對象,釋放數據存儲空間
自動回收機機制:JVM的內存耗盡,一次性回收所有垃圾對象。
手動回收機制,使用System.gc(); 通知JVM執行垃圾回收。
Student s1 = new Student("aaa",20);//不會被當作垃圾回收
new Student("aaa",20);//會被當做垃圾回收
System.gc();
包裝類
基本數據類型 byte、char、short、int、long、float、double、boolean,
基本數據類型都存在棧中,引用類型都在堆中
從而只能通過運算符對基本數據類型操作,
為了讓基本數據類型提供更強大的功能所以創造出:基本數據類型所對應的引用數據類型
包裝類 是 引用類型默認值為null
基本數據類型包裝類型
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
boolean
Boolean
char
Character
包裝類將對應的基本數據類型包裝在一個對象中(對象則變為堆中,就可以使用方法。。。)
類型轉換與裝箱、拆箱
裝箱:把棧(基本類型)拿到堆(引用類型)中,反之拆箱。
裝箱:
//基本類型
int n =18;
//使用Integer類創建對象、valueof()方法返回一個 Integer指定的 int值的 Integer實例
1.Integer integer = new Integer(n);//把傳入的數字
2.Integer integer1 = Integer.valueof(n);
拆箱:
//intvalue()方法返回int值
Integer integer2 = new Integer(n);
int num2 = integer2.intvalue();
JDk1.5后自動提供裝箱拆箱
//自動裝箱
int a = 15;
Integer integre1=a;
//自動拆箱
int a2=integer1;
基本類型和字符串之間的轉換
//基本類型轉換字符串轉
int n1 =100;//使用toString()方法
1.String s1 = n1+"";
2.String s2 = Integer.toString(n1);
//字符串轉換成基本類型
`String str ="100";
//使用Integer.parseXXX()
int n2 = Integer.parseInt(str);
//boolean字符串行式轉換成基本類型 "true"都是true 非 true 都是false
String str2 = "false";
boolean b = Boolean.parseBoolean(str2);
Integer緩沖區
//面試題
Integer integer1 = new Integer(100);
Integer integer2 = new Integer(100);
System.out.printin(integer1==integer2);//false
//比的是地址
Integer integer3 = 100;//自動裝箱 =Integer integer3 = Integer.valueof(100);
Integer integer4 = 100;//從在Cache[] 數組-128——127中找到 直接給棧內的對象 堆地址相同唯一
System.out.printin(integer3==integer4);//true
Integer integer5 = 200;
Integer integer6 = 200;
System.out.printin(integer5==integer6);//false
//Intrger.valueof(i) i 是有范圍的-128——127 超出范圍會 new Integer(i); 從而使地址不同
String類
字符串是常量,創建之后不可改變
字符串字面值存儲在字符串池(方法區內的)中,可以共享。
實例:
String name ="Hello";//"hello"常量存儲在常量池中
name ="zhangsan"; ? ?//把zhangsan賦值給name變量,給字符賦值時,并沒有修改數據,而是重新開辟空間
String name2 = "zhangsan";
String s ="Hello"; 產生一個對象,字符串池中存儲。
String s = new String(“Hello”);產生兩個對象,堆、常量池個存儲一個。
//展示字符串的另一個創建方式
String str = new Strinf("java");//new 在堆中一個對象
String str2 = new Strinf("java");
System.out,printin(str==str2); //false 都在堆中new 所以地址不同
System.out,printin(str.equals(str2));//true 因為這是比的是數據而不是地址
字符串常用的方法
1.public int length() :返回字符串的長度
2.public char charAt(int index) :根據下標獲取字符
3.public boolean contains(String str) : 判斷當前字符串是否包含str
String name = "java最好";
System.out.printin(name.length()); //6
System.out.printin(name.charAt(name.length()-1)); ?//好
System.out.printin(name.contains("java"));//true
4.public char[ ] toCharArray( ) :將字符串轉換成數組
5.public int indexOf(String str) :查找str首次出現的下標,存在,則返回該下標,不存在,則返回-1.
6.public int lastIndexOf(String str) :查找字符串在當前字符串中最后一次出現的下標索引
String name = "java最好,java真香";
System.out.printin(Arrays.toString(name.toCharArray()));// [j,a,v,a,......]
System.out.printin(name.indexOf("java"));// 0
System.out.printin(name.lastIndexOf("java"));//7
split() 方法中 拆分split(“[ ,]+”)可以表示多個空格或 , 都能拆分
equalsIgnoreCase( )忽略大小寫的比較
比較大小 兩個字符串依次相同位置且依次往后比較,直至沒有則比較長度
案例演示
toUpperCase( )可以變為大寫
截取 :subString(int beginIndex )
subString(int beginIndex ,int endIndex)
String增強類 StringBuffer:可變長字符串,運行效率慢,線程安全
(單線程)StringBuilder: 可變長字符串,運行效率快,線程不安全
/**
* StringBuffer和StringBuilser的使用
* 比String 1.效率高
2.節省內存
*/
StringBuffer sb = new StringBuffer();
1.//append();追加
sb.append("java世界第一");
System.out.print(sb.toString());
2.//insert();添加 可以在某個位置添加
sb.insert(0,"dddddd");
3.// replace(); 可以再指定位置替換
sb.replace(0,5,"DDDDDD");
4.// delete();刪除 也可指定位置
sb.delete(0,5);
BigDecimal類
位置:java.math包中
作用:精確計算浮點數。
創建方式: BigDecimal bd = new BigDecimal(“字符串”);字符串精確
//面試題
double result =(1.4-0.5)/0.9;
//求結果 卻為0.0999999999...
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");
//減法 subtract()
BigDecimal r1 = bd1.subtract(bd2);
//加法 add()
BigDecimal r2 = bd1.add(bd2);
//乘法 multiply()
BigDecimal r3 = bd1.multiply(bd2);
//除法 divide() 面試題例題
BigDecimal r4 = new Bigdecimal("1.4")
.subtract(new Bigdecimal("0.5"))
.divide(new Bigdecimal("0.9"));
//除不盡保留幾位小數 divide(Bigdecimal bd,int scal(保留幾位),RoudingMode mode(取舍模式四舍五入等等))
四舍五入:Bigdecimal.ROUND_HALF_UP
Date類
Date表示特定的瞬間,精確到毫秒,Date類中的大部分方法都已經被Calender類中的方法所取代。
時間單位
1秒=1000毫秒
1毫秒=1000微秒
1微秒= 1000納秒
toLocalString() 時間格式 xxxx - x - x
Calendar類
Calendar提供了獲取或設置各種日歷字段的方法
構造方法: protected Calendar() 由于修飾符是protected,所以無法直接創建該對象
1.//創建Calendar對象
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime().toLocalString());//現在時間2020-10-1
System.out.println(calendar.getTimeInMillis());//獲取毫秒值
2.//獲取時間信息
年、月、日、時、分、秒
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH); // 月是從0-11開始 所以要加1
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);// HOUR 12小時、HOUR_OF_DAY24小時
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
3.//修改時間
Calendar calendar2 = Calendar.getInstance();
calendar2.set(Calendar.DAY_OF_MONTH,5)//修改當日為5
calendar2.add(Calendar.HOUR,+/-1);//增加或減少1個小時
4.//獲取最大值最小值
int max = claendar2.getActualMaximum(Calendar.DAY_OF_MONTH);
int min = claendar2.getActualMinimum(Calendar.DAY_OF_MONTH);
SimpleDateFormat類
SimpleDateFormat是一個與語言環境有關的方式來格式化和解析日期的具體類,
進行格式化(日期->文本)、解析(文本->日期) .
常用的時間模式字母
字母日期或時間示例
y
年
2019
M
年中月份
08
d
月中天數
10
H
一天中小時數
24
m
分鐘
25
s
秒
60
S
毫秒
666
1.//創建SimpleDateFormat對象 y年M月s天H時m分s秒
SimpleDateFormat sdf =new SimpleDateFormat(patter);//pattern表示參數
↓
↓
SimpleDateFormat sdf =new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
2.//創建Date
Date date = new Date();
//格式化date,把日期轉成字符串
String str = sdf.format(date);
System.out.print(str);
//解析,把字符串轉成日期
Date date = sdf.parse("1990/5/1")
System類
System是系統類,主要用于獲取系統的屬性數據和其他操作,構造方法私有的
方法名說明
static void arraycopy(......)
復制數組
static long currentTimeMillis();
獲取當前系統時間,返回毫秒值
static void gc();
建議JVM趕快啟動垃圾回收器回收垃圾
static void exit (int status);
退出JVM,如果參數是0表示正常退出JVM,非0表示異常退出JVM
1.
//src :源數組
//srcPos:從哪個位置開始復制
//dest :目標數組
//destPos:目標位置
public class Test1 {
public static void main(String[] args) {
int[] arr1 = {2,5,6,4,5};
int [] arr2 = new int[10];
//System.arraycopy(src, srcPos, dest, destPos, length);
System.arraycopy(arr1, 0, arr2, 1, 2);
for (int i = 0; i < arr2.length; i++) {
System.out.print(arr2[i]+",");
}
}
}
2.
// System.out.println(System.currentTimeMillis());
// 也可以用來計時
long start = System.currentTimeMIllis();
long end = System.currentTimeMIllis();
3.
//System.gc();垃圾回收
4.System.exit(0)
#
總結
以上是生活随笔為你收集整理的java常用class类_java常用类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【深度学习】这千层transformer
- 下一篇: 【学术相关】翻倍!研究生招生规模持续扩张