直接赋值常量值,只是创建了一个对象引用,而这个对象引用指向常量值。
JMM就是Java内存模型(java memory model)。因为在不同的硬件生产商和不同的操作系统下,内存的访问有一定的差异,所以会造成相同的代码运行在不同的系统上会出现各种问题。所以java内存模型(JMM)屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能达到一致的并发效果。
异常是java程序员无法避免的一个话题,我们会有JVM自己的异常也有应用程序的异常,对于不同的异常,我们的处理原则是不是一样的呢?
如果父类在执行构造函数的时候调用了一个可以被重写的方法,那么在该方法中可能会使用到未初始化的数据,从而导致运行时异常或者意外结束。
设置 Java 构建路径Java构建路径用于在编译Java项目时找到依赖的类,包括以下几项:源码包项目相关的 jar 包及类文件项目引用的的类库我们可以通过使用 Java 项目属性对话框中的 Java Build Path(Java 构建路径)选项来查看和修改 Java 构建路径。
打开新建 Java 接口向导新建 Java 接口向导可以创建新的 Java 接口。打开向导的方式有:点击 File 菜单并选择 New > Interface在 Package Explorer 窗口中右击鼠标并选择 New > Interface在工具条上的下拉框按钮中 选择 在打开创建 Java 接口向导前,最好选择好Java接口所属的包名,这样在创建 Java 接口时包名字段就会自动填充。
打开新建 Java 类向导你可以使用新建 Java 类向导来创建 Java 类,可以通过以下途径打开 Java 类向导:点击 "File" 菜单并选择 New > Class在 Package Explorer 窗口中右击鼠标并选择 New > Class点击类的下拉按钮 并选择在打开创建 Java 类向导前,最好选择好Java类所属的包名,这样在创建 Java 类时包名字段就会自动填充。
打开新建 Java 包向导你可以使用新建 Java 包向导来创建 Java 包。Java 包向导打开方式有:通过点击 "File" 菜单并选择 New > Package在 Package Explorer 中通过右击鼠标选择 > Package在工具条上点击包按钮 如果你要创建子包,在打开创建 Java 包向导前选择好父包,这样在名称字段就有了父包的值。
打开新建 Java 项目向导通过新建 Java 项目向导可以很容易的创建 Java 项目。打开向导的途径有:通过点击 "File" 菜单然后选择 New > Java Project在项目浏览器(Project Explorer)窗口中鼠标右击任一地方选择 New > Java Project在工具条上点击新建按钮 并选择 Java Project使用新建 Java 项目向导新建 Java 项目向导有两个页面。
JAVA目前的问题并不在于性能,因为JIT自动优化过的代码已经跟C匹敌了。
1. 下面哪个流类属于面向字符的输入流?A. BufferedWriterB. FileInputStreamC. ObjectInputStreamD. InputStreamReader答案:D解析:Java 的 IO 操作中有面向字节(Byte)和面向字符(Character)两种方式。 面向字节的操作为以 8 位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是 InputStream 和 OutputStream 的子类。
序列化与反序列化是我们日常数据持久化和网络传输中经常使用的技术,但是目前各种序列化框架让人眼花缭乱,不清楚什么场景到底采用哪种序列化框架。本文会将业界开源的序列化框架进行对比测试,分别从通用性、易用性、可扩展性、性能和数据类型与Java语法支持五方面给出对比测试。
最近拜读了一些Java Map的相关源码,不得不惊叹于JDK开发者们的鬼斧神工。他山之石可以攻玉,这些巧妙的设计思想非常有借鉴价值,可谓是最佳实践。然而,大多数有关Java Map原理的科普类文章都是专注于“点”,并没有连成“线”,甚至形成“网状结构”。因此,本文基于个人理解,对所阅读的部分源码进行了分类与总结,归纳出Map中的几个核心特性,包括:自动扩容、初始化与懒加载、哈希计算、位运算与并发,并结合源码进行深入讲解,希望看完本文的你也能从中获取到些许收获(本文默认采用JDK1.8中的HashMap)。
UTF-8 变长字节编码,一个字符需要使用1个、2个或者3个byte表示。由于中文通常需要3个字节表示,中文场景UTF-8编码通常需要更多的空间,替代的方案是GBK/GB2312/GB18030。
写JAVA代码的同学都知道,JAVA里的锁有两大类,一类是synchronized锁,一类是concurrent包里的锁(JUC锁)。其中synchronized锁是JAVA语言层面提供的能力,在此不展开,本文主要讨论JUC里的ReentrantLock锁。
1、使用java8新特性stream进行List去重 (distinct()方法)2、借助Set的特性进行去重(set和list转换去重 )
AntAnt 是 Apache 组织下的一个跨平台的项目构建工具,它是一个基于任务和依赖的构建系统,是过程式的。开发者需要显示的指定每一个任务,每个任务包含一组由 XML 编码的指令,必须在指令中明确告诉 Ant 源码在哪里,结果字节码存储在哪里,如何将这些字节码打包成 JAR 文件。Ant 没有生命周期,你必须定义任务和任务之间的依赖,还需要手工定义任务的执行序列和逻辑关系。
关于 Java 插件Gradle 是一个通用的构建工具,它能构建任何基于你的构建脚本的东西。开箱即用,当然除非你添加代码到你的构建脚本里,不然它不会构建任何东西。很多 Java 项目都有类似的基本流程:编译 Java 源文件,运行单元测试,创建 JAR 文件。如果你不是把代码从头写到尾,那还能接受。现在有了 Gradle 就不用忍受这些。解决问题的方法就是 插件。
# 执行 Java 代码你可以用 Ant 来执行 Java 代码。在下面的例子中,给出的 java 类文件需要一个参数(管理员的邮箱地址),执行后将发送一封邮件。public class NotifyAdministrator{ public static void main(String[] args) { String email = args[0]; notifyAdministratorviaEmail(email); System.out.
一些开源的测试框架比如JUnit,TestNG能够帮助你编写可复用的结构化的测试,为了运行这些测试,你要先编译它们,就像编译源代码一样。测试代码的作用仅仅用于测试的情况,你可不想把你的测试代码发布到生产环境中,把源代码和测试代码混在一起可不是个好主意。通常你会把源代码和测试代码分开来,比如Gradle的标准项目布局src/main/java和src/test/java。
关注时代Java