Java中平時沒怎麼用,但是比較重要的基礎語法(二)

編譯和打包

  • 類的包名如下
package com.bridge.www //包路徑
  • 無相互引用編譯
    • “-d”:表示要生成的目錄,而目錄的結構就package
    • "."表示在當前所在目錄中生成程序文件
javac -d . Hello.java //編譯
  • 需要相互引用的編譯
    • 當多個包相互導入時,編譯順序不容易把握,此時,我們可以交給jdk編譯
    • “包.*” 只會加載需要的類,不需要的類,並不會被加載
javac -d . *.java
使用jar命令打包
  • 對編譯後的class文件才能打包,比如上面的Hello.class
jar -cvf hello.jar cn
- c : 創建一個jar文件
- v:得到一個詳細的輸出;
- f: 設置要生成的jar文件名稱,這裏定義的是“hello.jar”
  • 每一個“*.jar”文件都是一個獨立的程序路徑,如果想要在java之中使用此路徑,可以使用CLASSPATH
  • 如果想在TestMessage.java中使用hello.jar包中的內容,可以如下操作:
SET CLASSPATH = .;D:\demo\hello.jar  
javac -d . TestMessage.java

public class與class定義的區別?

  • public class:類名稱必須與文件名稱保持一致;一個*.java文件中,值允許有一個public class;這個類可以被其他包所使用
  • class:類名稱可以與文件名稱不一致,並且一個*.java可以有多個類,編譯後會形成多個*.class文件,但是這些類只能夠被本包所訪問,外包無法訪問

包的靜態導入

  • 當使用了靜態導入處理之後,就好比該方法是直接定義在主類中
import static com.briage.www.Message*;//導入message中的靜態方法

//可以不用寫類名稱了,直接調用方法

異常的關係

  • Throwable有2個兒子,Error 和 Exception
    • Error:系統異常,不能處理
    • Exception:所有異常的父類,子類:RuntimeException
      • RuntimeException:運行異常,編譯時不強制處理,子類有:空異常、數組越界、類型轉換錯誤

斷言

  • 和python中一樣,如果斷言錯誤會拋異常,否則正常運行
  • 默認不啓動斷言,斷言啓動方式: java -ea demo

Lambda表達式

  • 根據匿名內部類的升級的函數式的表達式
  • 接口必須滿足SAM,就是隻有一個抽象方法,注意需要加上@FunctionalInterface標籤
@FunctionalInterface
interface IMessage{
	public void send(String str);
}
public class JavaDemo{
	public static void main(String args[]){
		IMessage msg = (str)->{
			System.out.print(str);
		};
		msg.send("bridge");
	}
}
Lambad表達式的幾種格式
  • 方法沒有參數:()->
  • 方法有參數:(參數,參數)->{}
  • 如果現在只有一行語句返回,可以這樣:(參數,參數)—> 語句:
@FunctionalInterface
interface IMath{
	public int add(int x,int y);
}
public class JavaDemo{
	public static void main(String args[]){
		IMath math = (t1,t2)->t1 + t2; //只有一個返回語句
		System.out.print(math.add(10,20));
	}
}

方法引用

概念
  • 引用靜態方法:類名稱 ::static方法名稱;
  • 引用某個實例對象的方法:實例化對象::普通方法;
  • 引用特定類型的方法:特定類::普通方法;
  • 引用構造方法:類名稱:: new
引用靜態方法
@FunctionalInterface
interface IFunction<P,R>{
    public R change(P p);
}
public class JavaDemo{
    public static void main(String[] arges){
        IFunction<Integer,String> fun = String :: valueOf;
        String str = fun.change(100);
        System.out.println(str);
    }
}
引用實例化對象
@FunctionalInterface
interface IFunction<R>{
    public R Upper();
}
public class JavaDemo{
    public static void main(String[] arges){
        IFunction<String> fun = "bridge" :: toUpperCase;
        System.out.println(fun.Upper());
    }
}
引用特定類
@FunctionalInterface
interface IFunction<P>{
    public int compare(P p1,P p2);
}
public class JavaDemo{
    public static void main(String[] arges){
        IFunction<String> fun = String :: compareTo;
        System.out.println(fun.compare("A","a"));
    }
}
構造方法的應用
class Person{
    private String name;
    private int age;
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    public String toString(){
        return "name:" + this.name + "age:" + this.age;
    }
}
@FunctionalInterface
interface IFunction<R>{
    R create(String s,int a);
}
public class JavaDemo{
    public static void main(String[] arges){
        IFunction<Person> fun = Person :: new ;
        System.out.println(fun.create("張三",18));
    }
}

內建函數式接口

  • java.util.function開發包中
功能性函數式接口
  • 有輸入,有輸出
import java.util.function.*;
public class JavaDemo{
    public static void main(String[] arges){
        Function<String, Boolean> fun = "**Ssadfas" :: startsWith ;  //String表示輸入值,Boolean表示輸出值
        System.out.println(fun.apply("**"));//返回的true
    }
}
消費型函數式接口
  • 只有輸入,沒有輸出
import java.util.function.*;
public class JavaDemo{
    public static void main(String[] arges){
        Consumer<String> con = System.out :: println ;
        con.accept("bridge");
    }
}
供給型函數接口
  • 只有輸出,沒有輸入
import java.util.function.*;
public class JavaDemo{
    public static void main(String[] arges){
        Supplier<String> sup = "BRIDGE" :: toLowerCase ;
		System.out.print(sup.get());
    }
}
斷言型函數接口
import java.util.function.*;
public class JavaDemo{
    public static void main(String[] arges){
        Predicate<String> pre = "BRIDGE" :: equalsIgnoreCase ;
		System.out.print(pre.test("bridge"));
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章