赞
踩
bin 目录 | 包含命令行开发和调试工具,如javac,jar和javadoc。 |
---|---|
include目录 | 包含在编译本地代码时使用的C/C++头文件 |
lib 目录 | 包含JDK工具的几个JAR和其他类型的文件。 它有一个tools.jar文件,其中包 含javac编译器的Java类 |
jre/bin 目录 | 包含基本命令,如java命令。 在Windows平台上,它包含系统的运行时动态链 接库(DLL)。 |
jre/lib 目录 | 包含用户可编辑的配置文件,如.properties和.policy文件。包含几个JAR。 rt.jar文件包含运行时的Java类和资源文件。 |
没有名为jre的子目录 | |
---|---|
bin 目录 | 包含所有命令。 在Windows平台上,它继续包含系统的运行时动态链接库。 |
conf 目录 | 包含用户可编辑的配置文件,例如以前位于jre\lib目录中的.properties和.policy文件 |
include 目录 | 包含要在以前编译本地代码时使用的C/C++头文件。 它只存在于JDK中 |
jmods 目录 | 包含JMOD格式的平台模块。 创建自定义运行时映像时需要它。 它只存在于JDK中 |
legal 目录 | 包含法律声明 |
lib 目录 | 包含非Windows平台上的动态链接本地库。 其子目录和文件不应由开发人员直接编辑或使用 |
模块将由通常的类和新的模块声明文件(module-info.java)组成。该文件是位于
java代码结构的顶层,该模块描述符明确地定义了我们的模块需要什么依赖关系, 以及哪些模块被外部使用。在exports子句中未提及的所有包默认情况下将封装在 模块中,不能在外部使用。
命令行输入jshell
public interface MyInterface { //如下的三个方法的权限修饰符都是public void methodAbstract(); static void methodStatic(){ System.out.println("我是接口中的静态方法"); } default void methodDefault(){ System.out.println("我是接口中的默认方法"); methodPrivate(); } //jdk 9中允许接口中定义私有的方法 private void methodPrivate(){ System.out.println("我是接口中的私有方法"); } }
public class MyInterfaceImpl implements MyInterface { @Override public void methodAbstract() { } // @Override public void methodDefault() { System.out.println("实现类重写了接口中的默认方法"); } public static void main(String[] args) { //接口中的静态方法只能由接口自己调用 MyInterface.methodStatic(); //接口的实现类不能调用接口的静态方法 // MyInterfaceImpl.methodStatic(); MyInterfaceImpl impl = new MyInterfaceImpl(); impl.methodDefault(); //接口的私有方法,不能在接口外部调用 // impl.methodPrivate(); } }
//java9特性五:钻石操作符的升级
@Test
public void test2() {
//钻石操作符与匿名内部类在java 8中不能共存。在java9可以。
Comparator<Object> com = new Comparator<>() {
@Override
public int compare(Object o1, Object o2) {
return 0;
}
};
//jdk7中的新特性:类型推断
ArrayList<String> list = new ArrayList<>();
}
//java9 特性六:try操作的升级 public static void main(String[] args) { //java 8之前的资源关闭的操作 // InputStreamReader reader = null; // try { // reader = new InputStreamReader(System.in); // char[] cbuf = new char[20]; // int len; // if((len = reader.read(cbuf) )!= -1){ // String str = new String(cbuf,0,len); // System.out.println(str); // } // } catch (IOException e) { // e.printStackTrace(); // } finally { // if(reader != null){ // try { // reader.close(); // } catch (IOException e) { // e.printStackTrace(); // } // // } // } //java 8中资源关闭操作: Java 8 中,可以实现资源的自动关闭 //要求自动关闭的资源的实例化必须放在try的一对小括号中 // try(InputStreamReader reader = new InputStreamReader(System.in)){ // char[] cbuf = new char[20]; // int len; // if((len = reader.read(cbuf) )!= -1){ // String str = new String(cbuf,0,len); // System.out.println(str); // } // } catch (IOException e) { // e.printStackTrace(); // } //java9中资源关闭操作:需要自动关闭的资源的实例化可以放在try的一对小括号外。 //此时的资源属性是常量,声明为final的,不可修改 InputStreamReader reader = new InputStreamReader(System.in); try (reader) { char[] cbuf = new char[20]; int len; if((len = reader.read(cbuf) )!= -1){ String str = new String(cbuf,0,len); System.out.println(str); } // reader = null; } catch (IOException e) { e.printStackTrace(); } }
结论:String 再也不用 char[] 来存储啦,改成了 byte[] 加上编码标记,节约了一些空间
//java8中的写法: @Test public void test1() { List<String> namesList = new ArrayList<>(); namesList.add("Joe"); namesList.add("Bob"); namesList.add("Bill"); //返回的namesList是一个只读的集合 namesList = Collections.unmodifiableList(namesList); namesList.add("Tom"); System.out.println(namesList); } @Test public void test2() { List<String> list = Collections.unmodifiableList(Arrays.asList("a", "b", "c")); Set<String> set = Collections.unmodifiableSet(new HashSet<>(Arrays.asList("a", "b", "c"))); // 如下操作不适用于jdk 8 及之前版本,适用于jdk 9 Map<String, Integer> map = Collections.unmodifiableMap(new HashMap<>() { { put("a", 1); put("b", 2); put("c", 3); } }); map.forEach((k, v) -> System.out.println(k + ":" + v)); } @Test public void test3() { //此时得到的集合list也是一个只读集合。 List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); //报异常 list.add(6); } //java9新特性八:集合工厂方法:创建只读集合 @Test public void test4() { List<Integer> list1 = List.of(1, 2, 3, 4, 5); //不能添加 // list1.add(6); System.out.println(list1); Set<Integer> set1 = Set.of(23, 3, 54, 65, 43, 76, 87, 34, 46); //不能添加 // set1.add(4); System.out.println(set1); Map<String, Integer> map1 = Map.of("Tom", 23, "Jerry", 54, "HanMeimei", 12); //不能添加 //map1.put("Lilei",34); System.out.println(map1); Map<String, Integer> map2 = Map.ofEntries(Map.entry("Tom", 34), Map.entry("Jerry", 21)); // map2.put("Lilei",34); System.out.println(map2); }
@Test
public void test5() {
ClassLoader cl = this.getClass().getClassLoader();
try (InputStream is = cl.getResourceAsStream("hello.txt");
OutputStream os = new FileOutputStream("src\\hello1.txt")) {
is.transferTo(os); // 把输入流中的所有数据直接自动地复制到输出流中
} catch (IOException e) {
e.printStackTrace();
}
}
@Test public void test1(){ List<Integer> list = Arrays.asList(23, 43, 45, 55, 61, 54, 32, 2, 45, 89, 7); //takeWhile 返回从开头开始的按照指定规则尽量多的元素 // list.stream().takeWhile(x -> x < 60).forEach(System.out::println); //dropWhile():与 takeWhile 相反,返回剩余的元素。 list.stream().dropWhile(x -> x < 60).forEach(System.out::println); } @Test public void test2(){ //of()参数中的多个元素,可以包含null值 Stream<Integer> stream1 = Stream.of(1, 2, 3,null); stream1.forEach(System.out::println); //of()参数不能存储单个null值。否则,报异常 // Stream<Object> stream2 = Stream.of(null); // stream2.forEach(System.out::println); Integer i = 10; i = null; //ofNullable():形参变量是可以为null值的单个元素 Stream<Integer> stream3 = Stream.ofNullable(i); long count = stream3.count(); System.out.println(count); } @Test public void test3(){ Stream.iterate(0,x -> x + 1).limit(10).forEach(System.out::println); //java9中新增的重载的方法 Stream.iterate(0,x -> x < 100,x -> x + 1).forEach(System.out::println); }
//java9新特性十一:Optional提供了新的方法stream()
@Test
public void test4(){
List<String> list = new ArrayList<>();
list.add("Tom");
list.add("Jerry");
list.add("Tim");
Optional<List<String>> optional = Optional.ofNullable(list);
Stream<List<String>> stream = optional.stream();
// long count = stream.count();
// System.out.println(count);
stream.flatMap(x -> x.stream()).forEach(System.out::println);
}
Nashorn 项目在 JDK 9 中得到改进,它为 Java 提供轻量级的 Javascript 运行时。
Nashorn 项目跟随 Netscape 的 Rhino 项目,目的是为了在 Java 中实现一个高性能但轻量级的 Javascript 运行时。
Nashorn 项目使得 Java 应用能够嵌入Javascript。它在 JDK 8 中为Java 提供一个Javascript 引擎。
@Test public void test1() { //1.声明变量时,根据所附的值,推断变量的类型 var num = 10; var list = new ArrayList<Integer>(); list.add(123); //2.遍历操作 for (var i : list) { System.out.println(i); System.out.println(i.getClass()); } //3.普通的遍历操作 for (var i = 0; i < 100; i++) { System.out.println(i); } }
@Test
public void test4() {
try {
var url = new URL("http://www.atguigu.com");
var connection = url.openConnection();
var reader = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
@Test public void test2() { //1.局部变量不赋值,就不能实现类型推断 // var num ; //2.lambda表示式中,左边的函数式接口不能声明为var // Supplier<Double> sup = () -> Math.random(); // var sup = () -> Math.random(); //3.方法引用中,左边的函数式接口不能声明为var // Consumer<String> con = System.out::println; // var con = System.out::println; //4.数组的静态初始化中,注意如下的情况也不可以 int[] arr = {1, 2, 3, 4}; // var arr = {1,2,3,4}; }
@Test public void test3() { // 情况1:没有初始化的局部变量声明 // var s = null; // 情况6:catch块 // try{ // // }catch(var e){ // e.printStackTrace(); // } } //情况2:方法的返回类型 // public var method1(){ // return 0; // } // 情况3:方法的参数类型 // public void method2(var num){ // // } //情况4:构造器的参数类型 // public Java10Test(var i){ // // } //情况5:属性 // var num;
@Test public void test5(){ //示例1: var list1 = List.of("Java", "Python", "C"); var copy1 = List.copyOf(list1); System.out.println(list1 == copy1); // true //示例2: var list2 = new ArrayList<String>(); list2.add("aaa"); var copy2 = List.copyOf(list2); System.out.println(list2 == copy2); // false //示例1和2代码基本一致,为什么一个为true,一个为false? //结论:copyOf(Xxx coll):如果参数coll本身就是一个只读集合,则copyOf()返回值即为当前的coll //如果参数coll不是一个只读集合,则copyOf()返回一个新的集合,这个集合是只读的。 }
@Test public void test1(){ // isBlank():判断字符串是否为空白 System.out.println(" \t \t \n ".isBlank()); // strip():去除首尾空白 System.out.println("-----" + " \t abc \t \n ".strip() + "-------"); System.out.println("-----" + " \t abc \t \n ".trim() + "-------"); // stripTrailing():去除尾部空格 System.out.println("-----" + " \t abc \t \n ".stripTrailing() + "-------"); // stripLeading():去除首部空格 System.out.println("-----" + " \t abc \t \n ".stripLeading() + "-------"); // repeat(int count):复制字符串 String str1 = "abc"; String str2 = str1.repeat(5); System.out.println(str2); // lines().count():行数统计 String str3 = "abc\ndef\ng"; System.out.println(str3.lines().count()); }
@Test public void test2(){ var op = Optional.empty(); System.out.println(op.isPresent());//判断内部的value是否存在 System.out.println(op.isEmpty());//判断内部的value是否为空 op = Optional.of("abc"); //orElseThrow():value非空,返回value;否则抛异常NoSuchElementException var obj = op.orElseThrow(); System.out.println(obj); Optional<String> op1 = Optional.of("hello"); // op = Optional.empty(); //or:value非空,返回对应的Optional;value为空,返回形参封装的Optional Optional<Object> op2 = op.or(() -> op1); System.out.println(op2);// }
@Test
public void test3(){
//错误的形式: 必须要有类型, 可以加上var
// Consumer<String> con1 = (@Deprecated t) -> System.out.println(t.toUpperCase());
// 正确的形式:
// 使用var的好处是在使用lambda表达式时给参数加上注解。
Consumer<String> con2 = (@Deprecated var t) -> System.out.println(t.toUpperCase());
}
@Test public void test4(){ try { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder(URI.create("http://127.0.0.1:8080/test/")).build(); HttpResponse.BodyHandler<String> responseBodyHandler = HttpResponse.BodyHandlers.ofString(); HttpResponse<String> response = client.send(request, responseBodyHandler); String body = response.body(); System.out.println(body); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } @Test public void test5(){ HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder(URI.create("http://127.0.0.1:8080/test/")).build(); HttpResponse.BodyHandler<String> responseBodyHandler = HttpResponse.BodyHandlers.ofString(); CompletableFuture<HttpResponse<String>> sendAsync = client.sendAsync(request, responseBodyHandler); sendAsync.thenApply(t -> t.body()).thenAccept(System.out::println); //HttpResponse<String> response = sendAsync.get(); //String body = response.body(); //System.out.println(body); }
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。