Java基本數(shù)據(jù)類型
Java基本數(shù)據(jù)類型可分為三類:基本類型仰担,引用類型,空類型绩社。其中基本類型可以分為布爾類型(boolean(true/false))和數(shù)值類型(整形:byte(1)摔蓝,short(2)赂苗,int(4),long(8)贮尉;浮點型:float(4)拌滋,double(8)),引用類型(String)绘盟,空類型(null)鸠真,字符型(char(2)),所有的類型均屬于java中的類龄毡。java類分為兩種吠卷,自己定義和常用基本數(shù)據(jù)類型。
Java數(shù)組
表示方法:int arr [ ] = new int [3]; int arr [ ] = new int []{a1,a2};
數(shù)組排序
Java對象數(shù)組聲明
Java對象數(shù)組(類名稱 對象 = new 類名稱[ ]{參數(shù)1,參數(shù)2,...})沦零,定義私有private 類名稱 數(shù)組名稱(private emp [ ] emps)
匿名對象
有名對象:Book ba = new Book("Java",32.1);
匿名對象:new Book("Java",32.1);
包裝類
Java設計思想為一切皆對象祭隔,而基本數(shù)據(jù)類型不屬于對象,所以提供了包裝類路操。
一疾渴、對象型包裝類(Object直接子類):Character、Boolean屯仗;
二搞坝、數(shù)值型包裝類(Number直接子類):Byte、Short魁袜、Integer桩撮、Flaot、Double峰弹、Long店量,Number是一個抽象類,里面定義了六個方法 intValue()鞠呈、flaotValue()融师、shortValue()、doubleValue()蚁吝、byteValue()旱爆、longValue()。
class MyInt{
private int temp;
public MyInt(int temp){
this.temp = temp;
}
public int intValue(){
return this.temp;
}
}
public class ListNode{
public static void main(String []args){
MyInt mi = new MyInt(10);
int temp = mi.intValue();
System.out.println(temp*2);
}
}
String類
一窘茁、 String類的兩種實例化方式
String str = "Hello" ;String str = new String("Hello");用equals比較并不相等疼鸟。
抽象類/抽象方法(沒有方法體{},需用abstract定義)
概念
一庙曙、抽象類必須有子類(每一個抽象類一定要被子類所繼承);
二浩淘、抽象類的子類(子類不是抽象類)必須要覆寫抽象類之中的全部抽象方法捌朴;
三吴攒、抽象類的對象實例化需要依靠子類完成,采用向上轉型的方式處理砂蔽;
四洼怔、抽象方法無方法體,無法被調用;
五左驾、一個子類只能繼承一個抽象類镣隶,屬于單繼承。
abstract class A{
public void fun(){
System.out.println("ARG_IN");
}
public abstract void funa();
}
public class Duo{
public static void main(String []args){
A a = new A();
a.fun();
a.funa();
}
}
--------------------------------------------------------
Duo.java:9: 錯誤: A是抽象的; 無法實例化
A a = new A();
^
1 個錯誤
基本語法
abstract class A{
public void fun(){
System.out.println("ARG_IN");
}
public abstract void funa();
}
class B extends A{ //B是A的子類诡右,所以B也是抽象類
public void funa(){
System.out.println("x");
}
}
public class Duo{
public static void main(String []args){
A a = new B(); //向上轉型
a.fun();
a.funa(); //覆寫
}
}
使用限制
一安岂、不能使用final定義,因為abstract定義的類必須有子類帆吻,而final定義的類不能有子類域那;
二、外部類不允許使用static定義猜煮,而內部類允許使用static聲明次员;
三、使用static聲明的類屬于外部類王带。
abstract class A{
static abstract class B{ //使用static聲明的類屬于外部類
public abstract void fun();
}
}
class B extends A.B{ //使用static聲明的類屬于外部類
public void fun(){
System.out.println("abstract");
}
}
public class Duo{
public static void main(String []args){
A.B a = new B();
a.fun();
}
}
三淑蔚、任何情況下,如果執(zhí)行類中的static的時候愕撰,都可以在沒有對象的時候直接調用刹衫,對于抽象類也是一樣。
abstract class A{
public static void fun(){
System.out.println("abstract");
}
}
public class Duo{
public static void main(String []args){
A.fun();
}
}
----------------------------------------------------
//去掉static
Duo.java:9: 錯誤: 無法從靜態(tài)上下文中引用非靜態(tài) 方法 fun()
A.fun();
^
1 個錯誤
四盟戏、內部抽象類
abstract class A{
public abstract void fun();
private static class B extends A{
public void fun(){
System.out.println("x");
}
}
public static A getInstance(){
return new B();
}
}
public class Duo{
public static void main(String [] args){
A a = A.getInstance(); //上面實例化了對象B
a.fun();
}
}
五绪妹、模板設計
package practice;
abstract class Actiona7{
public static final int EAT = 1;
public static final int SLEEP = 5;
public static final int WORK = 7;
public void command(int flag){
switch(flag){
case EAT:
this.eat();
break;
case SLEEP:
this.sleep();
break;
case WORK:
this.work();
break;
}
}
public abstract void eat();
public abstract void sleep();
public abstract void work();
}
class Human extends Actiona7{
public void eat(){
System.out.println("人吃飯");
}
public void sleep(){
System.out.println("人睡覺");
}
public void work(){
System.out.println("人工作");
}
}
class Robot extends Actiona7{
public void eat(){
System.out.println("機器人吃飯");
}
public void sleep(){
System.out.println();
}
public void work(){
System.out.println("機器人工作");
}
}
class Pig extends Actiona7{
public void eat(){
System.out.println("豬吃飯");
}
public void sleep(){
System.out.println("豬睡覺");
}
public void work(){
System.out.println();
}
}
public class Duo{
public static void main(String []args){
fun(new Human());
fun(new Pig());
fun(new Robot());
}
public static void fun(Actiona7 act){
act.command(Actiona7.EAT);
act.command(Actiona7.SLEEP);
act.command(Actiona7.WORK);
}
}
接口
屬于一個抽象的類,這個類里面只有抽象方法和全局變量,和抽象類一樣柿究,也不能用new實例化對象邮旷。
一、接口必須有子類蝇摸,但此時一個子類可以使用implements實現(xiàn)多個接口婶肩;
二、接口的子類(如果不是抽象類)貌夕,必須要覆寫接口中的全部抽象方法律歼;
三、接口的對象可以利用子類對象的向上轉型進行實例化操作啡专;
四险毁、子類可以實現(xiàn)多個接口,而卻只能繼承一個抽象類,接口不能繼承抽象類畔况;
五鲸鹦、一個抽象類只可以繼承一個抽象類,而一個接口卻可以使用使用extends關鍵字同時繼承多個接口跷跪;
六馋嗜、接口內可以定義普通內部類、抽象內部類吵瞻、內部接口葛菇;
七、使用static定義的類屬于外部類橡羞,使用static定義的接口屬于外部接口眯停。
實現(xiàn)接口
interface A{
public static final String STR = "Hello";
public abstract void fun();
}
interface B{
public abstract void get();
}
class X implements A,B{
public void fun(){
System.out.println("A");
}
public void get(){
System.out.println("B");
}
}
public class Duo{
public static void main(String []args){
X x = new X();
A a = x;
B b = x;
a.fun();
b.get();
}
}
當子類既要繼承又要實現(xiàn)接口時,要先繼承后接口尉姨。
interface A{
public static final String STR = "Hello";
public abstract void fun();
}
interface B{
public abstract void get();
}
abstract class C{
public abstract void change();
}
class X extends C implements A,B{
public void fun(){
System.out.println("A");
}
public void get(){
System.out.println("B");
}
public void change(){
System.out.println("C");
}
}
public class Duo{
public static void main(String []args){
X x = new X();
A a = x;
B b = x;
C c = x;
a.fun();
b.get();
c.change();
}
}
外部接口
interface A{
public void funA();
static interface B{
public void funB();
}
}
class X implements A.B{
public void funB(){}
}
標準定義(定義不同層之間的操作標準)
接口時一個標準庵朝,不同類之間通過接口連接實現(xiàn)
interface Usb{
public void start();
public void stop();
}
class Computer{
public void plugin(Usb usb){
usb.start();
usb.stop();
}
}
class Mp3 implements Usb{
public void start(){
System.out.println("Mp3jion");
}
public void stop(){
System.out.println("Mp3nojoin");
}
}
class U implements Usb{
public void start(){
System.out.println("Ujoin");
}
public void stop(){
System.out.println("Unojoin");
}
}
public class Duo{
public static void main(String args[]){
Computer com = new Computer();
com.plugin(new Mp3());
com.plugin(new U());
}
}
Factory工廠設計模式
interface Fruits{
public void eat();
}
class Oranger implements Fruits{
public void eat(){
System.out.println("Eat Orange");
}
}
class Apple implements Fruits{
public void eat(){
System.out.println("Eat Apple");
}
}
class Factory{
public static Fruits getIstance(String name){
if("Apple".equals(name)){
return new Apple();
}else if("Oranger".equals(name)){
return new Oranger();
}else{
return null;
}
}
}
public class Duo{
public static void main(String []args){
Fruits f = Factory.getIstance("Apple");
f.eat();
}
}
Proxy代理設計模式
interface Subject{
public void make();
}
class Empire implements Subject{
public void make(){
System.out.println("ing");
}
}
class Assistant implements Subject{
private Subject sub;
public Assistant(Subject sub){
this.sub = sub;
}
public void prepare(){
System.out.println("prepare");
}
public void make(){
this.prepare();
this.sub.make();
this.destory();
}
public void destory(){
System.out.println("ed");
}
}
public class Duo{
public static void main(String []args){
Subject subj = new Assistant(new Empire());
subj.make();
}
}
抽象類和接口的區(qū)別
區(qū)別 抽象類 接口
----------------------------------------------------------------
關鍵字 abstract class interface
----------------------------------------------------------------
聲明 構造方法、普通方法 抽象方法又厉、全局常量
抽象方法九府、變量、常量
-----------------------------------------------------------------
子類使用 class 子類 extends 抽象類 class 子類 implement 接口覆致,接口......
----------------------------------------------------------------
關系 抽象類可以實現(xiàn)多個接口 接口不能繼承抽象類侄旬,卻可以繼承多個父接口
--------------------------------------------------------------------
權限 可以使用各種權限 只能使用public權限
-------------------------------------------------------------------
限制 單繼承局限 沒有單繼承局限
-----------------------------------------------------------------------
子類 抽象類和接口都必須有子類,子類必須要覆寫全部的抽象方法
--------------------------------------------------------------------------
實例化對象 依靠子類對象的向上轉型進行對象的實例化
Object類
Object是所有類的父類煌妈,在其他類不使用extens時;所有類對象實例化的時候儡羔,子類構造一定會默認調用父類的無參構造。
任何一個Java簡單類都應覆寫Object類中的以下三個方法璧诵。
取得對象信息 public String to String();
對象比較 public boolean equals(Object obj);
取得對象HASH碼 public int hashCode();
class Book extends Object{
}
public class Duo{
public static void main(String []args){
Object oba = new Book();
Object obb = "hello";
Book ba = (Book)oba;
Book bb = (Book)obb;
}
}
取得對象信息 public String to String();
class Book extends Object{
}
public class Duo{
public static void main(String []args){
Book bk = new Book();
String str = "Hello";
System.out.println(bk);
System.out.println(bk.toString());
System.out.println(str);
}
}
---------------------------------------------------
F:\prac>java Duo
Book@15db9742
Book@15db9742
Hello
-------------------------------------------------------
class Book extends Object{
private String title ;
private double price ;
public Book(String title,double price){
this.title = title;
this.price = price;
}
public String toString(){
return "Title:"+this.title+" "+"Price:"+this.price;
}
}
public class Duo{
public static void main(String []args){
Book b = new Book("Java",78.9);
System.out.println(b);
}
}
--------------------------------------------------
F:\prac>java Duo
Title:Java Price:78.9
對象比較 public boolean equals(Object obj);
class Book{
private String title ;
private double price ;
public Book(String title,double price){
this.title = title;
this.price = price;
}
public boolean equals(Object obj){
if(this == obj){ //地址相同
return true;
}
if(obj == null){
return false;
}
if(!(obj instanceof Book)){ //異常處理汰蜘,不是本類對象
return false;
}
Book book = (Book)obj;
if(this.title.equals(book.title)
&& this.price == book.price){
return true;
}
return false;
}
public String toString(){
return "Title:"+this.title+" "+"Price:"+this.price;
}
}
public class Duo{
public static void main(String []args){
Book b1 = new Book("Java",78.9);
Book b2 = new Book("Java",78.9);
System.out.println(b1.equals(b2));
}
}
Object可以接收一切引用數(shù)據(jù)類型
一、Object接收數(shù)組對象
public class Duo{
public static void main(String []args){
Object obj = new int []{1,2,3};
System.out.println(obj);
if(obj instanceof int []){
int data[] = (int []) obj;
for(int x=0;x<data.length;x++){
System.out.println(data[x]);
}
}
}
}
二之宿、Object接收接口對象
interface Book{
public void fun();
}
class Bk implements Book{
public void fun(){
System.out.println("Hello World!!!");
}
}
public class Duo{
public static void main(String args[]){
Book b = new Bk();
Object obj = b;
Bk c = (Bk) obj;
c.fun();
}
}
三族操、Object接收接口鏈表
匿名內部類
使用接口的前提,可以要基于接口或抽象類的應用比被。
interface Book{
public void fun();
}
class Text implements Book{
public void fun(){
System.out.println("Hello World");
}
}
public class ListNode{
public static void main(String []args){
print(new Text());
}
public static void print(Book bk){
bk.fun();
}
}
轉換
interface Book{
public void fun();
}
public class ListNode{
public static void main(String []args){
print(new Text(){
public void fun(){
System.out.println("Hello World");
}
});
}
public static void print(Book bk){
bk.fun();
}
}