Java开发之路
文章平均质量分 96
Java开发从菜鸟到高手的蜕变过程,记录下我们的点点滴滴,让每一个菜鸟在初期都不用像我们那样挣扎,从我们学习历程中得到更好的升华。。。
@SmartSi
Stay Hungry, Stay Foolish
展开
-
JVM 类加载器与双亲委派模型
1. 类加载器我们知道,虚拟机在加载类的过程中需要使用类加载器进行加载,而在 Java 中,类加载器有很多,那么当 JVM 想要加载一个 .class 文件的时候,到底应该由哪个类加载器加载呢?这时候就需要双亲委派机制来告诉 JVM 使用哪个类加载器加载。在讲解什么是双亲委派机制之前,我们先看一下有哪些加载器。从 Java 虚拟机的角度来讲,只存在两种不同的类加载器:一种是启动类加载器 Bootstrap ClassLoader,这个类加载器使用 C++ 语言实现,是虚拟机自身的一部分;另一种就是所有其原创 2022-05-08 18:44:40 · 324 阅读 · 1 评论 -
[Java开发之路](26)Cookie机制
1. Cookie机制会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不转载 2016-07-12 22:28:55 · 2000 阅读 · 0 评论 -
[Java开发之路](25)引用类型
1. 强引用Java中的引用,类似于C++的指针。通过引用,可以对堆中的对象进行操作。在某个函数中,当创建了一个对象,该对象被分配在堆中,通过这个对象的引用才能对这个对象进行操作。StringBuffer str = new StringBuffer("hello world");假设以上代码是在函数体内运行的,那么局部变量str将被分配在栈上,而对象StringBuffer实原创 2016-04-04 11:42:46 · 1521 阅读 · 0 评论 -
[Java开发之路](24)内部类
在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。1. 成员内部类成员内部类是定义在另一个类内部的类。package com.qunar.fresh;/** * Created by xiaosi on 16-3-29.原创 2016-04-04 11:40:14 · 1684 阅读 · 0 评论 -
[Java开发之路](23)装箱与拆箱
1. 简介大家对基本数据类型都非常熟悉,例如 int、float、double、boolean、char 等。基本数据类型是不具备对象的特性,比如基本类型不能调用方法、功能简单。。。,为了让基本数据类型也具备对象的特性, Java 为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型。 对象包装类是不变的,即一旦构造了包装类,就不允许更改包装在其中的原创 2016-03-27 13:00:48 · 1772 阅读 · 0 评论 -
[Java开发之路](22)hashcode
Long中有个小小的陷阱,就是在-128至127范围内,Long.valueOf(long l)返回的Long的实例是相同的,而在此范围之外每次使用valueOf(long l)时,返回的实例都是不同的。举例:System.out.println(Long.valueOf(-129) == Long.valueOf(-129)); // falseSystem.out.原创 2016-03-27 12:55:27 · 1221 阅读 · 0 评论 -
[Java开发之路](21)Comparator与Comparable
1. Comparablepackage java.lang;import java.util.*;public interface ComparableT> { public int compareTo(T o);}说明:Comparable 是排序接口。若一个类实现了Comparable接口,则该类可以支持排序。 假设现在存在实现Comparable接口的类的实例的L原创 2016-03-14 20:56:19 · 1697 阅读 · 1 评论 -
[Java开发之路](20)try-with-resource 异常声明
Try-with-resources是java7中一个新的异常处理机制,它能够很容易地关闭在try-catch语句块中使用的资源。在java7以前,程序中使用的资源需要被明确地关闭,过程有点繁琐,如下所示:package com.qunar.lectures.tryResource;import java.io.*;import java.util.ArrayList;import j原创 2016-03-11 00:18:07 · 3734 阅读 · 0 评论 -
[Java开发之路](19)Long缓存问题
Long中有个小小的陷阱,就是在-128至127范围内,Long.valueOf(long l)返回的Long的实例是相同的,而在此范围之外每次使用valueOf(long l)时,返回的实例都是不同的。举例:System.out.println(Long.valueOf(-129) == Long.valueOf(-129)); // falseSystem.out.原创 2016-03-10 19:53:43 · 3179 阅读 · 0 评论 -
[Java开发之路](18)关于Class.getResource和ClassLoader.getResource的路径问题
Java中取资源时,经常用到Class.getResource和ClassLoader.getResource。昨天老师讲解题目时候,问我们为什么你们都是在文件前家上"/":String path = Resources.class.getResource("/a.txt").getPath();注:在Resources文件下创建了a.txt文件我想我反正是试出来的,不使用"/原创 2016-03-07 20:57:40 · 2840 阅读 · 7 评论 -
[Java开发之路](16)学习log4j日志
1. 新建一个Java工程,导入Jar包(log4j-1.2.17.jar)2. 配置文件:创建并设置log4j.properties # 设置log4j.rootLogger = debug,stdout,D,E # 输出信息到控制台log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4原创 2016-01-20 10:35:31 · 2966 阅读 · 0 评论 -
[Java开发之路](15)注解
1. 简介注解(也被称为元数据),为我们在代码中添加信息提供了一种形式化的方法。注解在一定程度上是把元数据与源代码文件结合在一起,而不是保存在外部文档中这一大趋势之下所催生的。它可以提供用来完整的描述程序所需的信息,而这些信息是无法使用Java来表达的。因此,注解使得我们能够以将编译器来测试和验证的格式,存储有关程序的额外信息。注解可以用来生成描述符文件,甚原创 2016-01-15 10:05:12 · 2048 阅读 · 0 评论 -
[Java开发之路](14)反射机制
1. Class类普通对象构造方式:// 创建Book实例对象Book book = new Book(); 对于Class的实例对象如何构造呢?Class的构造函数是私有的,只有JVM才能创建实例对象// Class的构造函数是私有的,只有JVM才能创建Class实例对象Class class1 = new Class(); //原创 2016-01-15 09:59:41 · 2045 阅读 · 0 评论 -
[Java开发之路](12)JDOM和DOM4J解析XML文档
1. JDOM解析XML文档1.1 简介JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念以及映射),把SAX和DOM的功能有效地结合起来。在使用设计上尽可能地隐藏原来使用XML过程中的复杂性。利用JDOM处原创 2016-01-03 23:03:50 · 2632 阅读 · 0 评论 -
[设计模式实践之路](1)单例模式
【简介】单例模式(Singleton)保证一个类仅有一个实例,并提供一个访问它的全局访问点。 实现单例模式的一个最好的方法就是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以创建,并且它可以提供一个访问该实例的方法。【特点】单例模式具有一下特点:单例类只有一个实例单例类必须自己创建自己的唯一实例单例类必须给所有其他对象提供这一原创 2015-01-26 21:02:34 · 1288 阅读 · 0 评论 -
[Java开发之路](11)SAX解析XML文档
1. 简介Dom解析功能强大,可增删改查,操作时会将XML文档读到内存,因此适用于小文档;SAX解析是从头到尾逐行逐个元素解析,修改较为不便,但适用于只读的大文档;SAX采用事件驱动的方式解析XML。套用网友的解释:如同在电影院看电影一样,从头到尾看一遍,不能回退(Dom可来来回回读取),在看电影的过程中,每遇到一个情节,都会调用大脑去接收处理这些信息。SAX也原创 2016-01-03 13:02:33 · 2274 阅读 · 0 评论 -
[Java开发之路](10)DOM解析XML文档
对象序列化的一个重要限制是它只是Java的解决方案:只有Java程序才能反序列化这种对象。一种更具操作性的解决方案是将数据转化为XML格式,这可以使其被各种各样的平台和语言使用。1. 简介DOM 是用与平台和语言无关的方式表示XML文档的官方 W3C 标准。DOM 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分原创 2016-01-02 16:32:52 · 1799 阅读 · 0 评论 -
[Java开发之路](9)对象序列化与反序列化
1. 对象序列化当你创建对象时,只要你需要,它会一直存在,但是程序终止时,无论何时它都不会继续存在。尽管这样做是非常有意义的,但是在某些情况下,如果程序不运行时扔能存在并且保存其信息,那将对我们非常有用。这样,在下次程序运行时,该对象将被重建并且拥有的信息与程序上次运行时它所拥有的信息相同。当然,我们也可以通过将信息写入文件或者数据库,但是如果能将一个对象声明为是"持久性"的,原创 2016-01-01 17:01:36 · 2395 阅读 · 0 评论 -
[Java开发之路](8)输入流和输出流
1. Java流的分类按流向分:输入流: 可以从其中读入一个字节序列的对象称作输入流。输出流: 可以向其中写入一个字节序列的对象称作输出流。这些字节序列的来源地和目的地可以是文件,而且通常都是文件,但是也可以是网络连接,甚至是内存块。抽象类InputStream和OutputStream构成了输入和输出类层结构的基础。按数据传输单位分:字节流:原创 2015-12-30 14:03:17 · 3432 阅读 · 1 评论 -
[细说Java](3)创建字符串是使用" "还是构造函数?
在Java中,可以使用两种方式创建字符串:String x = "abc";String y = new String("abc");对于这两种方式(双引号,构造函数)它们到底有什么区别呢?1. 双引号 vs 构造函数这个问题可以使用这两个简单代码实例来回答:实例一String a = "abcd";S翻译 2015-12-28 20:05:20 · 2485 阅读 · 1 评论 -
[细说Java](2)Java中字符串为什么是不可变的
在Java中字符串(String)是一个不可改变的类。一个不可改变的类只是一个对象实例不可修改的简单类。当创建一个对象实例时,对象实例的所有信息都被初始化,并且信息不能被修改。对于不可改变的类来说还有很多优势。上一篇文章很好说明了为什么字符串被设计成不可改变的。只有你很好的掌握了内存,同步,数据结构等知识后,你才能很好的回答这个问题。1. 字符串常量池的需求翻译 2015-12-27 20:10:41 · 1576 阅读 · 0 评论 -
[细说Java](1)图说字符串的不变性
我们用下面一组图来说明Java的不变性。1.声明一个字符串String s = "abcd";s存储了字符串对象的引用。下面图片中的箭头就表示这种存储引用。2. 将一个字符串变量赋值给另外一个字符串变量String s2 = s;s2变量存储了同样的引用值。所以,两个变量指向同一个字符串对象。翻译 2015-12-26 23:46:25 · 2199 阅读 · 1 评论 -
[Java开发之路](7)RandomAccessFile类详解
RandomAccessFile适用于大小已知的记录组成的文件,提供的对文件访问,既可以读文件,也可以写文件,并且支持随机访问文件,可以访问文件的任意位置。文件中记录的大小不一定都相同,只要我们知道记录的大小和位置。但是该类仅限于操作文件。RandomAccessFile不属于InputStream和OutputStream继承层次结构中的一部分。除了实现DataInput和Dat原创 2015-12-23 21:04:20 · 3912 阅读 · 1 评论 -
[Java开发之路](6)File类的使用
1. 构造方法构造方法描述File(String pathname)通过将给定的路径名字符串转换为抽象路径名来创建一个新的文件实例。File(String parent , String child)通过给定的父路径名字符串和子路径名字符串来创建一个新的文件实例。File(Fil原创 2015-12-23 14:24:00 · 2915 阅读 · 2 评论 -
[Java]Java工程师成神之路
一、基础篇1.1 JVM1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收http://www.jcp.org/en/jsr/detail?id=133http://ifeve.com/jmm-faq/1.1.2. 了解JVM各种参数及调优1.1.3. 学习使用Java工具jps, jstack, jmap,转载 2015-12-23 09:48:44 · 6241 阅读 · 3 评论 -
[Java开发之路](5)异常详解
1. 异常分类在Java程序设计语言中,异常对象都是派生于Throwable类的一个实例。其是如果Java中的异常类不能满足需求,用户可以创建自己的异常类。下图是Java异常层次结构的一个简化示意图。从图上可以看出,所有的异常都是继承于Throwable类,但是在下一层立即分解为两个分支:Error和Excepti原创 2015-12-22 18:36:24 · 3245 阅读 · 4 评论 -
[Java开发之路](4)String、StringBuffer与StringBuilder详解
最近学习到字符串,整理了一下String,StringBuffer,StringBuilder相关知识1. StringString 类位于 java.lang 包中。String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。String str1 = "xiaosi";str1 = "欢迎你 " +原创 2015-12-21 10:57:07 · 3294 阅读 · 1 评论 -
[Java开发之路](3)Java常用类
1.包装类大家对基本数据类型都非常熟悉,例如 int、float、double、boolean、char 等。基本数据类型是不具备对象的特性,比如基本类型不能调用方法、功能简单。。。,为了让基本数据类型也具备对象的特性, Java 为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型。 基本类型和包装类之间的对应关系:原创 2015-12-20 13:36:19 · 1713 阅读 · 0 评论 -
[Java开发之路](2)Java字符串
1.什么是Java中的字符串在 Java 中,字符串被作为 String 类型的对象处理。 String 类位于 java.lang 包中。默认情况下,该包被自动导入所有的程序。创建 String 对象的方法:package com.qunar.test; public class HelloWorld { public static void mai原创 2015-12-18 22:35:59 · 2680 阅读 · 0 评论 -
[Java开发之路](1)final关键字
在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。1.修饰类final修饰类时,则该类不能被继承package com.qunar.bean; public final class Student { }package com.qunar.b原创 2015-12-20 19:55:36 · 1817 阅读 · 0 评论 -
[Java]套接字地址InetAddress讲解
package com.sjf;import java.net.Inet4Address;import java.net.Inet6Address;import java.net.InetAddress;import java.net.NetworkInterface;import java.net.UnknownHostException;import java.util.Enumera原创 2015-05-27 18:41:51 · 1876 阅读 · 0 评论 -
[Java]UDP通信的简单例子
package com.sjf;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.InetSocketAddress;import java.net.SocketExcepti原创 2015-05-27 15:17:54 · 3032 阅读 · 0 评论 -
[Hibernate开发之路](5)联合主键
现在大家都不推荐使用联合主键,关键是因为其需要自己手工维护,比较麻烦。但是一个项目可能因为历史遗留原因,你不得不面对联合主键。 Hibernate联合主键问题解决如下:可以使用一个组件作为一个实体类的标识符。你的组件类必须满足以下要求: (1)它必须实现 java.io.Serializable 接口 (2)它必须重新实现 equals() 和 hashCode() 方法,始终和组原创 2014-08-26 14:22:59 · 2137 阅读 · 0 评论 -
[Hibernate开发之路](4)ID生成策略
(1)uuid 采用XML配置方式 自动生成ID:采用uuid方式自动生成的ID为string类型(2)native根据不同的数据库采用不同的ID生成方式,例如:在SQL Server中采用identity; 在MySQL中采用auto_incremen原创 2014-08-25 12:36:24 · 2302 阅读 · 0 评论 -
[Hibernate开发之路](3)基础配置
一 JDBC链接通常你希望SessionFactory来为你创建和缓存(pool)JDBC连接. 如果你采用这种方式, 只需要如下例所示那样,打开一个Session: Session session = sessions.openSession(); // open a new Session一旦你需要进行数据访问时, 就会从连接池(connection pool)获得一个JD原创 2014-08-23 11:12:45 · 1981 阅读 · 0 评论 -
[Hibernate开发之路](2)Hibernate问题
(1)数据库驱动问题log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).log4j:WARN Please initialize the log4j system properly.Exception in thread "main" org.hibernate.Hibern原创 2014-08-20 15:55:50 · 1912 阅读 · 0 评论 -
[Hibernate开发之路](1)Hibernate配置
一 准备工作首先我们将创建一个简单的基于控制台的(console-based)Hibernate应用程序。我们所做的第一件事就是创建我们的开发目录,并且把所有需要用到的Java库文件放进去。解压缩从Hibernate网站下载的Hibernate发布包,并把所有需要的库文件拷到我们项目中去。学习建User-library-hibernate,并加入相应的jar包(a)项目右键-bui原创 2014-08-20 11:34:23 · 2234 阅读 · 0 评论