常见问题: final,finally和finalize的区别 final:最终的意思,可以修饰类,成员变量,成员方法 修饰类,类不能被继承 修饰变量,变量是常量 修饰方法,方法不能被重写 finally...语言的一个核心: jdk, java development kits---面向开发人员 jre, java Runtime Environment---服务器上 Java的两个核心机制...Java的三个版本 JavaSE:Java的标准版,主要用于桌面应用程序开发。同时也是Java程序的基础。...比如Oracle11g的安装包,eclipseIDE开发工具,JavaSE包含了Java的基础,比如JDBC就是Java链接数据库的操作,以及网络通信多线程等技术。 ...JavaEE:是Java的企业版,主要用于企业级分布式网络程序,比如电子商务和ERP企业管理系统,其核心为企业Java组建模型。例如淘宝京东都是用JavaEE开发的。
随着项目开发的规模越来越大,越往底层,可能抛出的异常类型也会越来越多。 如果上层想要处理这些异常,就需要挨个的写很 try-catch语句块来捕捉异常,这样是很麻烦的。 ...如果我们对底层抛出的异常捕获后,抛出一个新的统的异常,的确可以避免这个问题。但是直接抛出一个新的异常,又可能会造成最原始的异常信息丢失,不利于排查问题。 ...这里只是为了演示,实际工作都是Spring统一异常处理,没有try-catch,这里演示的是异常链传递异常的问题。...采用异常链,在保有底层异常信息的基础上,将多层次异常以链路方式进行封装,对后续追查定位BUG是非常有利的 推荐异常链写法1。...异常链写法2是利用异常的根类Throw中提的带参构造方法 Throwable (String message, Throwable cause)实现异常链信息的传递。
优秀的程序员应该有什么特征 特征 说明 兴趣 也可以说好奇,保持对计算机相关领域的兴趣甚至是激动,这是一个程序员的原动力 方法 优秀的人有一半是因为有好的方法或者好的习惯,如何学习、反思、总结、归纳 逻辑...兴趣可以让你在遇到困难时有更强的战斗力,提升突破难题的可能性; 兴趣可以让你抵御各种诱惑,保持对技术的专注; 兴趣可以自然而然的让你追求把事情做的更好; 培养兴趣 培养兴趣最简单的做法是“奖励”,当你完成一个看起来有难度的事情时...2天的时间完成 HTML+Erlang的Todo应用的前后端 2天时间把3、4、5、6的事情发表到博客上去 3天时间学习PhoneGap引擎的基本使用 2天时间修改你的web页面以适应PhoneGap,...优秀程序员并不仅仅要求有很强的数理逻辑能力,也要有很好的生活、沟通逻辑能力,很多人先天性的认为程序员就不应该是善于沟通的,不太明白为何有这样的看法(也许是因为某些天才程序员很孤僻?...设想一下:假设你回头15年前,但是你的记忆都保留(彩票号码当然你得忘记掉),你对这15年的规划是否会更加合理? 学科通常都是成体系的,对一个学科要认识的更深,没有好的办法,只有认识的更全面才可以。
Java 多线程常见问题 上下文切换 多线程并不一定是要在多核处理器才支持的,就算是单核也是可以支持多线程的。...CPU 通过给每个线程分配一定的时间片,由于时间非常短通常是几十毫秒,所以 CPU 可以不停的切换线程执行任务从而达到了多线程的效果。...但是由于在线程切换的时候需要保存本次执行的信息(详见),在该线程被 CPU 剥夺时间片后又再次运行恢复上次所保存的信息的过程就称为上下文切换。 上下文切换是非常耗效率的。...死锁 死锁的场景一般是:线程 A 和线程 B 都在互相等待对方释放锁,或者是其中某个线程在释放锁的时候出现异常如死循环之类的。这时就会导致系统不可用。...如果是受限于资源的话可以采用集群来处理任务,不同的机器来处理不同的数据,就类似于开始提到的无锁编程。
● finalize:Object 类的一个方法,所以Java对象都有这个方法,当某Java对象没有更多的引用指向的时候,会被垃圾回收器回收,该对象被回收之前,由垃圾回收器来负责调用此方法,通常在该方法中进行回收前的准备工作...Java认为Checked异常都是可以被处理的异常,所以Java程序必须显式处理Checked异常。如果程序没有处理Checked 异常,该程序在编译时就会发生错误无法编译。...5、Java 异常处理机制的理解 Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为 java.lang.Throwable,Throwable下面又派生了两个子类:Error...6、最常见的RuntimeException ● java.lang.NullPointerException 空指针异常;出现原因:调用了未经初始化的对象或者是不存在的对象。...● java.lang.ClassNotFoundException 指定的类找不到;出现原因:类的名称和路径加载错误;通常都是程序试图通过字符串来加载某个类时可能引发异常。
在Java应用程序的开发和部署过程中,很多开发者可能会遇到各种各样的问题。这些问题涵盖了从环境配置到依赖管理的各个方面。在本篇博客中,我们将探讨一些常见的Java程序部署问题,并提供相应的解决方案。...版本兼容性问题 问题描述: Java程序通常需要在特定的JDK(Java Development Kit)版本上运行。如果你的应用程序在目标环境中缺少或使用不兼容的JDK版本,可能会导致运行时错误。...解决方案: 确保目标环境中安装了与你的应用程序兼容的JDK版本。在你的部署文档中明确说明所需的Java版本,并建议用户按照这些要求进行配置。 2....这些参数分别设置JVM的初始内存和最大内存。合理的内存配置有助于提高应用程序的稳定性和性能。 结语 在Java程序部署的过程中,及时发现并解决问题是确保应用程序正常运行的关键。...通过明确的文档、良好的依赖管理和正确的配置,你可以有效地避免和解决部署中的常见问题。希望这些解决方案能够帮助你更轻松地部署和管理你的Java应用程序。
无限使用heap内存 错误的写法: ? 这里有一个前提,就是文件大小不能讲JVM的heap撑爆。否则就等着OOM吧,尤其是在高并发的服务器端代码。...最好的做法是采用Stream的方式边读取边存储(本地文件或database)。 正确的写法: ? 另外,对于服务器端代码来说,为了系统的安全,至少需要对文件的大小进行限制。...捕获所有的异常 错误的写法: ? 这是EJB3的一个查询操作,可能出现异常的原因是:结果不唯一;没有结果;数据库无法访问,而捕获所有的异常,设置为null将掩盖各种异常情况。 正确的写法: ?...正确的写法: ? 重复包装RuntimeException 错误的写法: ? 正确的写法: ? 不正确的传播异常 错误的写法: ? 主要是没有正确的将内部的错误信息传递给调用者....is可能close失败, 导致os没有close 正确的写法: ? 捕获不可能出现的异常 错误的写法: ? 正确的写法: ? transient的误用 错误的写法: ?
选择错误的类加载器 错误的代码: ?...这里本意是希望用当前类来加载希望的对象, 但是这里的getClass()可能抛出异常, 特别在一些受管理的环境中, 比如应用服务器, web容器, Java WebStart环境中, 最好的做法是使用当前应用上下文的类加载器来加载...错误的写法: ? 正确的写法: ? 错误的写法: ? 正确的写法: ?...第一个例子是对方法参数做了过多的限制, 第二个例子对方法的返回值做了太多的限制。 正确的写法: ? 对POJO的setter方法画蛇添足 错误的写法: ?...如果java编译器能针对这种情况给出警告. 或者在java语言规范中不支持浮点数类型的==操作就最好了。 正确的写法: ? 用浮点数来保存money 错误的写法: ? 这个也是一个老生常谈的错误.
字符串是常用的数据类型。在 Java 中,常见的字符串类型包括 String、StringBuffer 和 StringBuilder。...String 从 String 的源码可以看到,String 使用数组存储字符串的内容,数组使用关键词 final 修饰,因此数组内容不可变,使用 String 定义的字符串的值也是不可变的。...由于 String 类型的值不可变,因此每次对 String 的修改操作都会创建新的 String 对象,导致效率低下且占用大量内存空间。...总结 String 是不可变类型,每次对 String 的修改操作都会创建新的 String 对象,导致效率低下且占用大量内存空间,因此 String 适用于字符串常量的情形,不适合需要对字符串进行大量修改的情形...StringBuffer 是可变类型,可以修改字符串的内容且不会创建新的对象,且 StringBuffer 是线程安全的,适用于多线程环境。
每天在写Java程序,其实里面有一些细节大家可能没怎么注意,这不,有人总结了一个我们编程中常见的问题。虽然一般没有什么大问题,但是最好别这样做。...错误的使用StringBuffer 错误的写法: ?...数字转换成字符串 错误的写法: ? 正确的写法: ? 利用不可变对象(Immutable) 错误的写法: ? 正确的写法: ? 请使用XML解析器 错误的写法: ? 正确的写法: ?...请使用JDom组装XML 错误的写法: ? 正确的写法: ? XML编码陷阱 错误的写法: ? 因为xml的编码在文件中指定的,而在读文件的时候必须指定编码。...未指定字符编码 错误的写法: ? 这样的代码主要不具有跨平台可移植性。因为不同的平台可能使用的是不同的默认字符编码。 正确的写法: ? 未对数据流进行缓存 错误的写法: ?
: String xml = FileUtils.readTextFile("my.xml"); 因为xml的编码在文件中指定的,而在读文件的时候必须指定编码。...因为不同的平台可能使用的是不同的默认字符编码。...否则就等着OOM吧,尤其是在高并发的服务器端代码。最好的做法是采用Stream的方式边读取边存储(本地文件或database)。...正确的写法: File pdf = toPdf(file); 另外,对于服务器端代码来说,为了系统的安全,至少需要对文件的大小进行限制。...because: "+ e.getMessage, e); } 作者:java联盟 链接:https://juejin.im/post/5a27aa33518825619a028f69
某些Java开发人员使用 int a[] 而不是 int[] a 去声明一个数组。这两者有什么区别? A. 在Java中这两种用法都是合法的,他们的作用都是一样的。前者是在C中的定义数组的方法。...在Java库中有对stacks 和 queues 的实现吗? A. Java库中内建 java.util.Stack,但是你应该避免使用它如果你需要一个真正的栈的话。...我想使用数组来表示一个包含泛型的栈,但是以下代码编译报错。为什么? A. 不错的尝试。不幸的是,创建一个泛型数组在 Java 1.5里不支持。...你可以使用cast,比如下面的写法: 根本的原因是JAVA中的数组是“协变的(covariant)”,但是泛型并不是。...对于超出那个范围的数,Java会对于每一个数创建一个新的Integer对象。 转发分享是一种美德
常见问题之Java—— java.util.zip.ZipException: error in opening zip file 背景 日常我们开发时,会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)...o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整理汇总后分享给大家,让其还在深坑中的小伙伴有绳索能爬出来。...同时在这里也欢迎大家把自己遇到的问题留言或私信给我,我看看其能否给大家解决。...:140) ... 51 more 原因分析: 造成该问题的原因是因为在解压包时发生了错误,猜测应为包存在损坏情况 解决办法: 1、使用maven将相关包进行重新拉取,确保jar包完整性...(重新拉取时可能出现错误,很大可能就是这类错误影响的) 2、将项目重新build进行生成新的包,再次进行启动尝试基本就会恢复正常。
(1)java.lang.String类是引用数据类型,并且是final类型的,因此不可以继承这个类、不能修改这个类。...JDK中提供的好多核心类比如String,这类的类的内部好多方法的实现都不是java编程语言本身编写的,好多方法都是调用的操作系统本地的API,这就是著名的“本地方法调用”,也只有这样才能做事,这种类是非常底层的...他也不是估计的, 所以这个安全性是很重要的,java和C++相比,优点之一就包括这一点。...至于为什么要把String类设计成不可变类,是它的用途决定的。其实不只String,很多Java标准类库中的类都是不可变的。...当然也有一些缺点,比如每个不同的状态都要一个对象来代表,可能会造成性能上的问题。所以Java标准类库还提供了一个可变版本,即 StringBuffer。
1 问题 在判断两个字符串是否相等的时候很自然地使用了“==”但是为什么程序却不能正确运行,或者说得到的结果不是期望的结果?...2 方法 在java中String属于对象类型, 如果使用“==” 两个字符串是不是相等比较的不是String的内容, 而是根据内存图两个String对象的内存地址进行比较。...所以在java中要比较两个String是不是相等的要使用String.equals()。... System.out.println(str1.equals(str2)); 图片 System.out.println(str2.equals(str3)); } } 3 结语 Java...当判断基本数据类型时,判断的是数值,当判断引用数据类型时,判断变量是否指向同一引用对象,即内存图中两个变量的内存地址是不是同一个。
今天在使用Java日期API的时候遇到的一些问题,自己整理了下。貌似JDK8中有关于时间行的API,可是JDK8用的还不是很多,先弄明白7的相关知识。 问题1:如何以制定格式显示时间?...问题3:如何计算指定时间间隔以后的时间?...下面直接上代码(使用JUnit4进行测试): import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar...; import java.util.Date; import org.junit.Test; public class Time { //使用DataFormat以指定格式显示时间...JDK1.1以后时间的格式化由DateFormat类负责,时间与年月日等的转换等功能由Calender负责。这就是为什么我们看到Date类中的好多方法都是Depreated的原因。
注意的是,跨平台的Java程序,不是JVM。JVM是使用C/C++开发的,是编译后的字节码,不能跨平台。 2、JAVA中的数据类型及其各自的特点。...7、JAVA中的集合 Java中的集合分为两大类: Collection(value):包含list和Set,其中list是有序,可重复的;set是无序,不可重复的。...就是运行在WEB服务器上的一个Java小程序,用来接收和响应客户端发送过来的请求,通常使用HTTP协议 使用方法: 编写一个Java类,实现servlet接口 把开发好的Java类部署到web服务器当中...30、简单说一下对JDBC的理解 JDBC:Java数据库连接 Java只定义接口,让数据库厂商自己实现接口,对于我们开发人员而言,只需要导入对应厂商开发的实现即可,然后以接口的方式进行调用(mysql...67、Java虚拟机的生命周期? 负责运行一个java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。 68、简单讲一下类加载机制?
我们都知道在Java多线程里面,wait,notify,notifyAll,是用来做线程之间的通信使用的,它们的作用如下: wait方法:告诉当前线程,释放锁,然后开始睡眠等待,此时的状态为Watting...这其实跟Java的锁机制有关系,Java允许任何对象都可以成为一个锁也叫做对象监视器,监视器本身是一种信号量,对于信号量应该是共享的用来互斥或者线程通信的,如果把这三个方法定义在线程类里面,那就意味着不同的线程需要相互侵入才能完成通信...也就是说wait,notify,notifyAll存在的时候肯定是会发生data race(数据竞争),在Java里面如果发生数据竞争肯定是需要同步的,所以这三个方法如果要出现那么一定是在同步的时候。...如果你不在同步块里面调用这三个方法,那么将会抛出不合法监视器状态异常: java.lang.IllegalMonitorStateException (3)为什么在wait中,通常是在一个while循环中而不是使用...https://github.com/qindongliang/Java-Note 这个项目主要是我记录Java相关的学习笔记,包含了Java里面一些基础或者常见的知识如字符串和多线程并发相关等,并且在不断更新中
常见问题之Java——Thymeleaf常用语法 背景 日常我们开发时,我们会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整理汇总后分享给大家...,让其还在深坑中的小伙伴有绳索能爬出来。...同时在这里也欢迎大家把自己遇到的问题留言或私信给我,我看看其能否给大家解决。...开发环境 系统:windows10 JDK:openjdk11 内容 下面是日常比较常用的一些标签整理之后的表格,分享给大家,后续对于一些复杂标签会专门的进行实际案例讲解,欢迎大家持续关注 语法 描述... 添加文本 "{name}" 页面文本与返回值拼接 th:if="${sex==1}" th:text="成立的内容" 如果返回值sex是1则成立内容显示 th
虚引用主要用来跟踪对象被垃圾回收器回收的活动。 ---- 二、Java中的内存划分: Java程序在运行时,需要在内存中的分配空间。...虚拟机栈作用非常类似,其区别是:java虚拟机栈是为虚拟机执行java方法服务的,而本地方法栈则为虚拟机执使用到的Native方法服务。...4、堆:即堆内存(线程共享) (1)堆是java虚拟机所管理的内存区域中最大的一块,java堆是被所有线程共享的内存区域,在java虚拟机启动时创建,堆内存的唯一目的就是存放对象实例几乎所有的对象实例都在堆内存分配...三、Java对象在内存中的状态: 可达的/可触及的: Java对象被创建后,如果被一个或多个变量引用,那就是可达的。即从根节点可以触及到这个对象。...七、Java堆内存划分: Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。
领取专属 10元无门槛券
手把手带您无忧上云