JDK

Java 环境变量

强颜欢笑 提交于 2021-02-12 06:53:47
在本部分,我们将会讨论根据不同的操作系统环境来设置 Java 的语言环境。 OpenJDK - https://openjdk.java.net/ Sun JDK - https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 关于 JDK 和 OpenJDK,这个问题要从 Sun,Oracle,开源社区的恩恩怨怨说起。简单来说就是下面的一些内容(原文来自知乎: https://www.zhihu.com/question/19646618/answer/40621705 ) 使用过 Linux 的人都应该知道,在大多数Linux 发行版本里,内置或者通过软件源安装 JDK 的话,都是安装的 OpenJDK,那么到底什么是 OpenJDK,它与 SUN JDK有什么关系和区别呢? 历史上的原因是,OpenJDK 是JDK 的开放原始码版本,以 GPL(General Public License)协议的形式放出。在 JDK7 的时候,OpenJDK 已经作为 JDK7 的主干开发,SUN JDK7 是在 OpenJDK7 的基础上发布的,其大部分原始码都相同,只有少部分原始码被替换掉。使用JRL(JavaResearch License,Java研究授权协议)发布。至于

Java对象的序列化与反序列化

寵の児 提交于 2021-02-12 04:26:08
点击上方“ 程序员小灰 ”,选择“置顶公众号” 有趣有内涵的文章第一时间送达! 本文转载自公众号 Hollis 序列化与反序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。 一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等。在网络传输过程中,可以是字节或是XML等格式。而字节的或XML编码格式可以还原完全相等的对象。这个 相反的过程又称为反序列化。 Java对象的序列化与反序列化 在Java中,我们可以通过多种方式来创建对象,并且只要对象没有被回收我们都可以复用该对象。但是,我们 创建出来的这些Java对象都是存在于JVM的堆内存中的。 只有JVM处于运行状态的时候,这些对象才可能存在。 一旦JVM停止运行,这些对象的状态也就随之而丢失了。 但是在真实的应用场景中, 我们需要将这些对象持久化下来,并且能够在需要的时候把对象重新读取出来。Java的对象序列化可以帮助我们实现该功能。 对象序列化机制(object serialization)是Java语言内建的一种对象持久化方式,通过对象序列化,可以把对象的状态保存为字节数组,并且可以在有需要的时候将这个字节数组通过反序列化的方式再转换成对象。对象序列化可以很容易的在JVM中的活动对象和字节数组(流)之间进行转换。 在Java中,对象的序列化与反序列化被广泛应用到RMI

浅谈Java队列Queue

别等时光非礼了梦想. 提交于 2021-02-12 02:48:41
队列Queue就是一个先进先出的数据结构,与List、Set同一级别,继承了Collection接口。 一、Queue的实现 1、阻塞队列(BlockingQueue) ① 插入:队列不满时可执行插入元素线程,直到队列满。 ② 移除:队列不为空都可移除,直到队列为空。 抛出异常:满的时候插入,空的时候取出都会抛异常。 返回特殊值:插入成功返回true 一直阻塞:满时put和空时take会阻塞线程,直到队列可用。 超时退出:满时会阻塞插入一段时间,如果超过一定时间,线程就会退出。 JDK7提供了7个阻塞队列: ① ArrayListBlockingQueue ArrayBlockingQueue是一个由数组支持的有界阻塞队列。在读写操作上都需要锁住整个容器,因此吞吐量与一般的实现是相似的,适合于实现“生产者消费者”模式。 ② LinkedBlockingQueue 一个由链表结构组成的双向阻塞队列。 基于链表的阻塞队列,内部维持这一关数据缓冲队列。当生产者往队列中放入一个数据时,队列会从生产者手中获取数据,并缓存在队列内部,而生产者立即返回;当队列缓冲区达到最大缓冲容量时,才会阻塞生产者队列,直到消费者从队列中消费掉一份数据,生成者线程才会被唤醒,反之对消费者的处理也基于同样的原理。 LinkedBlockingQueue 之所以能够高效的处理并发数据,还因为其

java队列Queue及阻塞队列

|▌冷眼眸甩不掉的悲伤 提交于 2021-02-12 02:02:03
java队列 接口 Queue类 在java.util包,定义了以下6个方法 详细查看官方文档 https://docs.oracle.com/javase/7/docs/api/java/util/Queue.html 什么是阻塞队列 BlockingQueue   队列是一种数据结构,它的特点是先进先出( First In First Out),它有两个基本操作:在队列尾部加入一个元素,从队列头部移除一个元素。队列在多线程应用中,常用于生产-消费场景。   BlockingQueue 是 Java util.concurrent 包下重要的数据结构,BlockingQueue 提供了线程安全的队列访问方式:当阻塞队列进行插入数据时,如果队列已满,线程将会阻塞等待直到队列非满;从阻塞队列取数据时,如果队列已空,线程将会阻塞等待直到队列非空。并发包下很多高级同步类的实现都是基于 BlockingQueue 实现的。   BlockingQueue 具有 4 组不同的方法用于插入、移除以及对队列中的元素进行检查。如果请求的操作不能得到立即执行的话,每个方法的表现也不同。这些方法如下:   按照上图,我们可以知道jdk1.5中的阻塞队列的操作:   add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常   remove 移除并返回队列头部的元素

Java泛型

天涯浪子 提交于 2021-02-11 23:00:33
之前面试和这两天用到泛型解决了一些问题,才发现自己对泛型的了解只停留用的时候会想起来一点点....没有真正的准确梳理泛型,所以想写一写总结一下自己对泛型对理解 1、代码用泛型的好处 在写代码的时候经常不同数据类型,而泛型可以统一数据类型,便于操作。 将运行时的异常提前到了编译时,提高了效率(在jdk1.5中引入了新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法类型)。 避免了强制类型转换。 实现代码到模版化,把数据类型当作参数传递,提高了可重用性。 2、泛型 泛型,其实是"参数化类型"。泛型的本质是 参数化类型 (在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。换句话说在泛型使用过程中,操作数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别成为泛型类,泛型参数,泛型方法。 在jdk 1.5之前,没有泛型的情况下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,这种转换需要开发者对实际参数类型可以预知的情况下进行。对于强制类型转换错误的情况,编译气可能不提示错误,在运行的时候才出现异常。这时候泛型的好处就体现出来,使用泛型就可以首先通过IDE进行代码类型初步检测,然后在编译阶段进行编译类型检查,保证了类型转换的安全性;并且所有的强制转换都是自动和隐式的

并发系列(5)之 Future 框架详解

a 夏天 提交于 2021-02-11 22:54:56
本文将主要讲解 J.U.C 中的 Future 框架,并分析结合源码分析其内部结构逻辑; 一、Future 框架概述 JDK 中的 Future 框架实际就是 Future 模式的实现,通常情况下我们会配合线程池使用,但也可以单独使用;下面我们就单独使用简单举例; 1. 应用实例 FutureTask<String> future = new FutureTask<>(() -> { log.info("异步任务执行..."); Thread.sleep(2000); log.info("过了很久很久..."); return "异步任务完成"; }); log.info("启动异步任务..."); new Thread(future).start(); log.info("继续其他任务..."); Thread.sleep(1000); log.info("获取异步任务结果:{}", future.get()); 打印: [15:38:03,231 INFO ] [main] - 启动异步任务... [15:38:03,231 INFO ] [main] - 继续其他任务... [15:38:03,231 INFO ] [Thread-0] - 异步任务执行... [15:38:05,232 INFO ] [Thread-0] - 过了很久很久... [15:38:05,236

'javac' 不是内部或外部命令,也不是可运行的程序 或批处理文件.

不羁岁月 提交于 2021-02-11 16:02:20
如果你只需要使用javac命令不需要如此复杂的!! 你先把你自己新建的JAVA_HOME、CLASSPATH这两个变量和PATH变量中的JAVA_HOME%\bin;%JAVA_HOME%\jre\bin删了, 然后只要在Path变量的头部添加如下路径: C:\Program Files\Java\jdk1.5.0\bin;就可以了。(不需要在添加别的了) 原因很简单:你可以按照这个路径去看看有没有一个叫javac.exe的东东在bin文件夹中,环境变量Path的作用通俗点讲就是用来告诉你的电脑如何去找到这个可执行文件并执行它。 如果你是初学者的话配不配置CLASSPATH环境变量都可以的,因为CLASSPATH变量是用来设定“类路径”的(其实这种方式是sun不推荐的)。设置CLASSPATH变量的目的讲白了其实是为了把别人写好的类库挪过来好将来自己用。 希望对你有帮助哈,呵呵 <div class="htmledit_views" id="content_views"> <p>换了个工作环境,好吧,环境重新装一遍,遇到一个</p><h1 class="title-article" style="padding:0px;margin-top:0px;margin-bottom:0px;font-size:24px;color:rgb(51,51,51);font-family:

JAVA -- JDK JRE JAR

百般思念 提交于 2021-02-11 02:25:08
转载:http://blog.csdn.net/wym19830218/article/details/5399401 JDK里面的工具也是用JAVA编写的,它们本身运行的时候也需要一套JRE,如C:/Program Files/Java/jdk1.5.x/目录下的JRE。而C:/Program Files/Java/目录下的JRE是用来执行我们自己编写的JAVA程序。当然,两套JRE中的任何一套都可以用来执行我们自己编写的JAVA程序, 但是JDK里面的工具只能由C:/Program Files/Java/jdk1.5.x/目录下的JRE来执行。 也就是说 jdk(java development kit)是开发工具包,相当于是一个编译器。 jre(java runtime environment)是运行环境,相当于jvm虚拟机。jdk开发出来的java程序必须在jvm中运行,jre就提供了这么一个环境。 ---------------------------------------------------------------------------- JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库

Java基础念整理(jdk、jar、)

∥☆過路亽.° 提交于 2021-02-11 01:51:33
前世 java的历史来源背景 背景在网上百度随便都能找的到就不细说了,作为一个之前学习C++的程序员来说,学习java尽量对比学习,理解可以更加透彻。 首先:java相对C++摒弃了哪些特性,又增加了哪些特性? java的包、jdk、jar包、jre 包(package) package 特点 程序中如果有package语句,该语句一定是源文件中的第一条可执行语句; package语句的前面只能有注释或空行; 一个文件中最多只能有一条package语句; 包的名字有层次关系,各层之间以点分隔(上例中的“czf.abc.aaa”) 包层次必须与Java开发系统的文件系统结构相同; 通常包名中全部用小写字母; 当使用包说明时,程序中无需再引用(import)同一个包或该包的任何元素; import语句只用来将其他包中的类引入当前名字空间中。而当前包总是处于当前名字空间中. package使用注意 同一个源文件中的类,都在同一个包中,同一个包中的内容互相访问,不用导包; 导包的时候 以下两句: import czf.*; import cn.Info; 这两句,只在编译的时候有后者稍快一点,在运行的时候没有任何区别。 如果要设置classpath ,要设置到最外层的文件夹所在的目录上,比如: package czf.abc; set classpath=cn的所在的文件夹名称

Java职业生涯规划

送分小仙女□ 提交于 2021-02-10 23:02:29
java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍。这一部分的内容,同样适用于一些希望转行到Java的同学。   在大家看之前,我要先声明两点。1、由于我本人是Java后端开发出身,因此所推荐的学习内容是Java Web和Java后端开发的路线,非Java Web和Java后端开发的同学请适当参考其学习思想即可,切勿照搬。2、下面对于【第一部分】的推荐内容,目的是让你尽快成为一个可以参加工作的Java开发者,更适用于处于待业状态,准备转行Java的同学。 第一部分:基础 对于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学。 一、Java基础首先去找一个Java的基础教程学一下,推荐《Java编程思想》。学习Java基础的时候,应该尽量多动手,很多时候,你想当然的事情,等你写出来运行一下,你就会发现不是这么回事儿,不信你就试试。学完以上内容以后,你应该对Java有一个基本的了解了,你可以用Java语言写出一些简单的程序,并且你用的是最简单的编辑器,比如记事本。这个时候,不要急于进入下一部分,留下几天好好写一些程序,尽可能熟悉这些基础内容。 二、Web开发等你写上几天程序以后