Java7

简介: java7相关的注意点

java7相关的注意点

Path

path并不仅仅限于传统的文件系统,也能表示zip或者jar文件
path 不一定真实的文件或目录,可以随意的创建
path中可能有其他冗余项,比如符号链接,获取真实位置可以使用toRealPath() 或者normalize()
合并两个path 使用 resolve() ,或者获取相对位置relative()
转化Path file.toPath() path.toFile()

处理单个文件目录

String path = "F:\\mavenproject\\SpringProject";
        Files.newDirectoryStream(Paths.get(path),"*.xml")
                .forEach(e-> System.out.println(e.getFileName()));

递归处理文件件

static class FileFindXMLVisitor extends SimpleFileVisitor<Path>{
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
            if(file.toString().endsWith(".xml")&& (!file.toString().startsWith("Maven")))
                System.out.println(file.getFileName());
            return FileVisitResult.CONTINUE;
        }
    }
String path = "F:\\mavenproject\\SpringProject";
 Files.walkFileTree(Paths.get(path),new FileFindXMLVisitor());

  • Asynchronous IO 这是将来式,例如用Future.get()返回结果

如果在创建AsynchronousFileChannel 时没有为其指明线程池,那就会为其分配一个系统默认的线程池(可能会和其他通道共用),默认线程池是由AsynchronousChannelGroup类定义的系统属性进行配置的.

  • 回调式

主线程回派一个侦查员CompletionHandler到独立的线程中执行IO操作,这个侦查员会将IO操作的结果返回到主线程中,这个结果会触发他自己的completed或者failed方法(一般重写这两个方法)

        String filepath = "C:\\code\\temp.txt";
        Path filePath = Paths.get(filepath);

        AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(filePath);
        ByteBuffer byteBuffer = ByteBuffer.allocate(1000);
        fileChannel.read(byteBuffer, 0, byteBuffer, new CompletionHandler<Integer, ByteBuffer>() {
            @Override
            public void completed(Integer result, ByteBuffer attachment) {
                System.out.println("Bytes read: "+result);
            }

            @Override
            public void failed(Throwable exc, ByteBuffer attachment) {
                System.out.println(exc.getMessage());
            }
        });

并发安全

  • Java线程模型建立在(1)共享的,默认可见的可变状态`(2)抢占式线程调度`

1.所有线程可以很容易的共享同一进程中的对象
2.能引用这些对象的任何线程都能修改这些对象

  • 设计理念 安全性(并发类型安全) 活跃度 性能 重用性
    安全性是指: 不管同时发生多少操作都能确保对象保持自相一致
  • 系统开销之源: 锁与监测 环境切换次数 线程的个数 调度 内存的局部性 算法设计

scala 部分

1.类的定义(就他的参数而言)和类的构造方法是同一个东西,scala中也有辅助函数
2.类默认是公开的,所以没有必要加上public关键字的
3.方法的返回值是通过类型推断确定的,但要在定义方法的def从句中用等号告诉编译器做类型推断
4.scala不像java有原始类型,数字也是对象
5.关键字object告诉scala这是一个单利类
6.scala用方括号来表示泛型,所以类型参数的表示方法是Array[String]而不是String[]
7.Array是纯正的泛型
8.集合类型必须指明泛型(不能像java那样声明raw type like: List list = new ArrayList )
9.单个case不会像java中那样进入下一个case,所以不需要break
10.数组的访问用圆括号,例如 args(0)
11.类型推断有两个例外(1):方法声明中的参数类型(2):递归函数,scala编译器不能推断递归函数的返回类型
12.scala中没有static关键字,必须放在obejct半生对象中
13.scala局部函数,定义在函数内部的函数...不想暴露细节给外部...
14.Any的子类AnyValAnyRef ,AnyVal的子类Unit Boolean Fload Long ,nullAnyRef的所有子类,Nothing是所有(AnyVal和AnyRef)的子类
15.scala类必须有个主构造方法来定义该类的所需的参数,辅助构造函数只提供一个默认参数
16.如果类里面的方法没有括号,调用时也没有括号
17.伴生对象在相关类那里有特权,既可以访问私有函数和私有构造函数
18.在创建新的case类实例时,关键字new可以省略,实际上case类的底层实现上是一个创建新实例的工厂方法
19.scala默认是不可变集合,但也有可变集合

相关文章
|
前端开发 Java 数据安全/隐私保护
学JAVA,从现在开始-day05
每日记录自己学习java的心得和体会~
|
监控 Dubbo 安全
JAVA问答8
JAVA问答8
109 0
|
存储 缓存 运维
JAVA问答12
JAVA问答12
142 0
AbstractDemo.java
AbstractDemo.java
81 0
|
Java
Java常见的坑(二)
你猜上述程序输出的是什么? 是 ABC easy as 123 吗? 你执行了输出操作,你才发现输出的是 ABC easy as [C@6e8cf4c6 ,这么一串丑陋的数字是什么鬼? 实际上我们知道字符串与任何数值的相加都会变为字符串,上述事例也不例外, numbers输出其实实际上是调用了Object.toString()方法,让numbers转变为'[c' + '@' + 无符号的十六进制数。
62 0
|
SQL 负载均衡 Oracle
[一起学Java]
一、批量添加品牌信息到数据表 一、业务实现类实现
194 0
|
安全 Oracle Java
Java小史:从1到5
介绍Java从1到5的版本变化
249 0
|
人工智能 Java 程序员
6月来了,Java还是第一!
今天是2019年6月1号,栈长祝各位小程序猿们节日快乐。
6月来了,Java还是第一!
|
算法 Java
Java 吸血鬼数字
Java 吸血鬼数字
151 0
|
Oracle Java 关系型数据库
来了来了,Java14它真的来了
语言必须发展,否则它们就有变得无关紧要的风险,” Brian Goetz (甲骨文公司)在2019年11月在 Devoxx 举行的“ Java 语言期货”演讲中说。 作为 Java 语言架构师,他扮演了一个重要的角色,尽管 Java 已经发展了25年,但仍然远远没有过时。
1035 0

热门文章

最新文章