Java基础
文章平均质量分 70
云聪
喜欢简洁的抽象,也着迷神奇的细节,我担心自己因为过于偏向抽象而变得肤浅,也害怕自己因为太过深入细节而迷失,这让我很痛苦,但是我不会放弃挣扎,因为我相信挣扎的过程就是成长。
展开
-
从误用TreeSet到思考Java有序集合对相等和顺序比较一致性的要求
一、 发现问题 有这样一个任务:对一堆学生按照成绩进行排序。为了能够快速的获得有序结合,我选择了TreeSet这个有序数据结构来帮我完成这个任务。有两点让我认为TreeSet能够帮我快速获得有序的学生集合: (1)TreeSet基于红黑树实现,而红黑树是一个平衡二叉树,也就说,它的排序时间复杂度是nlognnlogn; (2)在插入的初期lognlogn较小。原创 2017-05-14 17:28:38 · 1758 阅读 · 0 评论 -
HashSet中消失的元素和多出来的元素
首先给出一个辅助类:package disappearElementInHashset;public class Person { private String name; public Person(String name) { super(); this.name = name; } public String getName() { return name;原创 2015-11-20 23:16:57 · 784 阅读 · 0 评论 -
Java反射(三)在运行时利用反射分析对象
在运行时利用反射分析对象,其实就是利用反射来获得或者设置类的域。举例如下:有一个Student类:package testreflection;public class Student { private String stuNum; public Student(String stuNum) { // TODO Auto-generated constructor stub原创 2015-06-26 21:54:49 · 931 阅读 · 0 评论 -
Java内部类(一)常规内部类
常规内部类和普通类最大的不同就是,它能访问外部类的私有实例域。下面是一个例子:package innerclass;public class Outer { private boolean isPrint; public Outer(boolean isPrint) { this.isPrint = isPrint; } public void useInnerMetho原创 2015-06-20 16:01:42 · 994 阅读 · 0 评论 -
Java 正确遍历字符串
Java字符串是一系列的Unicode字符序列,但是,它却常常被误认为是char序列。于是,我们经常这样来遍历字符串:package testchar;public class TestChar2 { public static void main(String[] args) { String s = "Aß東原创 2015-08-04 19:55:39 · 36888 阅读 · 0 评论 -
Java Integer和int类型变量的两两相等性比较
这里假设你对Java的基本类型和对应的包装器之间自动拆箱和装箱已经有所了解。但是这里强调一点,自动的拆箱和装箱是编译器在生成类的字节码时插入适当的方法调用来实现的。也就是说,我们可以反编译class文件,看看编译器插入了什么适当的方法来实现自动装箱和拆箱的。来看一个例子:public class Test { public static void main(String[] args) {原创 2015-08-30 14:35:29 · 9604 阅读 · 0 评论 -
Java反射(四)利用反射调用方法
有Student类:package testreflection;public class Student{ private static int count; private String stuNum; public Student(String stuNum) { // TODO Auto-generated constructor stub this.stuNum原创 2015-06-26 22:25:43 · 1771 阅读 · 0 评论 -
Java InputStreamReader和OutputStreamWriter
很想把这两个类的用法记下来,因为它们是我在Reader和Writer类层次结构中找到仅有的可以指定字符编码集(Charset)的输入输出类。这里两个类分别举一个例子来说明它俩的用法,它们分别作为InputStream和OutputStream的装饰者。 public void test1() { InputStream in; Charset charset = Charset.for原创 2015-08-11 20:11:36 · 1050 阅读 · 0 评论 -
Java 使用Charset类解决读入字符乱码问题和控制输出字符编码
Java中用UTF-16编码字符(见博文Java 正确遍历字符串),Charset类建立了UTF-16编码的字节序列和其它字符编码方式的字节序列之间的映射。当从外面读入表示字符的字节流时,我们可以通过Charset类指定原来字符的编码方式,好让程序可以正确的把字符原来的字节编码转化为Java自己的字节编码;同样,当把字符写出时,我们可以通过Charset指定字符的编码方式。下面举两个简单的例子来说原创 2015-08-09 22:50:48 · 2793 阅读 · 0 评论 -
Java 两个方法彼此调用导致java.lang.StackOverflowError
在我自己的Vector类中有一个构造方法: public Vector(float[] vector) { this.vector = vector; this.length = vector.length; this.size = VectorUtil.computeVectorSize(vector); }这个构造方法调用VectorUtil的computeVectorSiz原创 2015-08-09 10:56:57 · 2326 阅读 · 0 评论 -
Java泛型 通配符的限定
当我们声明一个泛型类变量时,会用具体的类型代替泛型类的类型变量。原创 2015-06-09 14:41:25 · 1049 阅读 · 1 评论 -
Java反射(一)Class类对象
被虚拟机加载的Java类的类信息放在方法区中;在类被加载进内存后,还会在堆区生成一个Class类对象,该对象向程序员提供了访问方法区中类信息的接口。一个类对应着一个Class对象。原创 2015-06-25 17:58:27 · 1041 阅读 · 0 评论 -
简单的线程池实现 Java
线程池用有限的线程执行无限的任务。我很好奇,这是如何实现的?在看了一些博文和简单的阅读了一下JDK线程池的源代码后,终于明白,原来就是:首先,创建固定数量的线程,然后,这些线程执行提交的Runnable的run方法。基于这个理解,我实现了一个极简的线程池:原创 2016-06-23 22:55:31 · 1128 阅读 · 0 评论 -
为何从ThreadLocal中获得的对象是线程安全的? Java7 Java8
本文为标题所提问题提供一个思路清晰的答案,让你很容易从宏观上理解ThreadLocal是如何工作的。从另一个方面来说,文中会忽略一些细节,如果想更多的了解细节,可以继续阅读文末提供的链接中的博文,或者在本文的基础上直接去读源码。接下来进入正题。原创 2016-04-29 20:36:21 · 5290 阅读 · 0 评论 -
利用管道化连接下载网页 Java
HTTP连接的建立需要时间。如果我们要从一台服务器上获取4个文件,获取每个文件都要重新建立连接来获取数据,这势必会降低文件下载效率,因为有一部分时间花费在建立连接上了,而不是真正在传输有用数据,如图a所示: 如果我们能建立一个连接,传输完所有四个文件,再关闭连接,必然会增加文件下载效率,因为节省了多次建立连接的开销,持久连接就是这样的连接,它的工作方式如图b所示: 简单的持久连接有个问题...原创 2016-05-10 21:25:54 · 1283 阅读 · 0 评论 -
Java执行JavaScript代码
我们要在Java中执行JavaScriptMethods.js中的execute(s1,s2)方法,JavaScriptMethods.js文件内容如下:function execute(s1, s2){ return s1 + s2;}原创 2016-03-26 18:06:24 · 3271 阅读 · 4 评论 -
append进StringBuilder里的字符串是""还是"null"? Java
有这样一个需求:有一个类,它有几个域,希望它的toString方法返回它的所有域的值组合成的字符串,域值之间用某种分隔符(比如####)分隔。我是这样实现的:public class CombineFieldWithDelimiter { private String field1; private String field2; private String field3;原创 2016-04-01 19:35:45 · 9895 阅读 · 1 评论 -
Java 测试正则表达式(二)量词和量词后缀
测试的结果作为注释放在测试方法的后面。package regularexpression;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.junit.Test;/** * 测试量词和量词后缀; * X和Y是正则表达式 * @author yunc原创 2015-06-15 22:36:11 · 1112 阅读 · 0 评论 -
Java内部类(四)静态内部类
如果使用内部类只是为了把一个类隐藏在另一个类的内部类,并不需要内部类引用外部类对象,就可以将内部类声明为static。换句话说,static的作用就是使内部类中没有对外部类对象的引用。原创 2015-06-21 20:41:24 · 655 阅读 · 0 评论 -
原来Java中有两个ArrayList
原来Java中有两个ArrayList原创 2016-01-05 19:44:36 · 1676 阅读 · 1 评论 -
Java8中 局部内部类访问的局部变量不必用final修饰
Java8中,局部内部类访问的局部变量不必为final修饰,这一点和Java7是不一样的。原创 2016-01-02 14:30:07 · 6269 阅读 · 4 评论 -
Java泛型 继承中类型变量的关系
通过例子来看泛型类在继承中过程中类型变量应该具有怎样的关系。首先给出几个辅助类:package generic;public class Animal { }package generic;public class Person extends Animal { private String name; public Person(String name)原创 2015-06-09 11:25:04 · 1431 阅读 · 0 评论 -
Java泛型 类型擦除在继承中引入的问题及编译器的解决方法
举例来说明类型擦除在继承中引入的问题以及编译器是如何解决的。有一个Pair类:package generic;/** * @version 1.00 2004-05-10 * @author Cay Horstmann */public class Pair { private T first; private T second; public Pair(原创 2015-06-09 10:14:34 · 977 阅读 · 0 评论 -
Java 测试正则表达式(一)字符类
测试的结果作为注释放在测试方法的后面。package regularexpression;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.junit.Test;/** * 测试字符类; * @author yuncong * */public cl原创 2015-06-15 21:11:07 · 756 阅读 · 0 评论 -
Java for循环里i++位置改变的影响
for循环里的i++的位置不同可能运行结果不一样原创 2015-05-12 12:05:46 · 2506 阅读 · 1 评论 -
Java 命令行下编译和运行带包名的类
在test包中有test类:package test;public class Test { public static void main(String[] args) { System.out.println("test"); }}我们需要在命令行中编译并运行这个类。首先把这个类放到一个文件夹中:命令行的工作目录为Java文件所在目录,执行下面这个命令:原创 2015-04-28 12:28:05 · 4813 阅读 · 0 评论 -
用例子理解Java权限修饰符(private,default,protected和public)
权限修饰用于限定对象起作用的范围,也就是,在什么地方我们能够访问到这个对象,在什么地方我们访问不到这个对象了,这里的对象是指属性、方法、类和接口。一、权限修饰符作用于属性和方法。private,default,protected和public都能作用于属性和方法。1.当private作用于属性和方法时,就只有在同一个类中能访问它们。例子如下:但是在同一包中的其它类(Pers原创 2015-03-12 11:23:44 · 9028 阅读 · 1 评论 -
Java中,null对象可以怎么用?不可以怎么用?
Java中,null对象可以被打印出来,也可以用来与另一个对象比较。下面是示例代码:package testnullpointerexception;public class Person { public String name; public String getName() { return name; } public void setName(String原创 2015-03-29 15:36:02 · 3284 阅读 · 0 评论 -
Java中,*=和+=的执行流程
直接看示例代码:原创 2015-03-29 15:14:16 · 839 阅读 · 0 评论 -
Java中,if-else if- else语句执行流程
突然间想到这个问题:在if-else if- else语句块中,如果所有if中的条件都为真,是每个if对应的语句都执行呢?还是只执行第一个条件为真的if对应的语句呢?答案是后者。下面是示例代码:由此总结if-else if- else语句的执行流程:遇到第一个条件为真的if语句,执行对应语句后就退出if-else if- else语句,不再检测后面的if条件是否为真;如果没有遇到条件为真的原创 2015-03-29 15:04:28 · 24711 阅读 · 0 评论 -
Java中,for语句块范围
我们都知道,语句块就是用大括号围起来的一段代码。这个定义让我对for语句块的范围感到迷惑,如for(int i = 0; ;){},这个i,到底是for语句块外面的变量,还是语句块里面的变量?答案是,i是属于for语句块里面的变量。在for语句块之外无法访问它。下面是测试代码:原创 2015-03-29 14:47:47 · 1124 阅读 · 0 评论 -
Java中,一个接口可以extends多个接口
Java中,一个类不能继承多个类,但是一个接口可能继承多个接口。下面是Java代码示例:package interfaceextends;public interface LaughBehavior { public void laugh();}package interfaceextends;public interface SpeakBehavior { public原创 2015-03-29 14:39:03 · 15865 阅读 · 0 评论 -
在浏览器中运行applet
用以下两个类定义了一个applet:import javax.swing.JApplet;public class VideoApplet extends JApplet{ public void init() { add(new VideoPanel()); }}import java.awt.Dimension;import java.awt.GridLayout;原创 2015-06-19 18:29:13 · 6032 阅读 · 0 评论 -
Java内部类(二)局部内部类
局部内部类就是声明在一个块(通常是方法)中的类。举例如下:package innerclass;public class Outer1 { private String outerClassName = "Outer1"; public void printLocalClass(final boolean isPrintOuterClassName) { // 与常规内部类不同,原创 2015-06-21 19:04:13 · 2922 阅读 · 0 评论 -
Java泛型 类型擦除
任何一个泛型类型,都对应这个一个原始类型。原始类型的名字来源于带参数的泛型类型名去掉参数后的结果,并将类中用到类型变量的地方替换为类型变量的限定类型(如果没有限定类型就用Object)。下面是一个来源于《Java核心技术 卷1》的例子:类型擦除前:package generic;/** * @version 1.00 2004-05-10 * @author Cay Horstma原创 2015-06-08 16:37:46 · 837 阅读 · 0 评论 -
Java泛型 类型变量的限定
有时候,类和方法需要对类型变量加以约束,比如你有一个方法,你只希望它接收某个特定类型及其子类型作为参数。下面就举一个方法限定接收参数的类型的例子来说明如何限定类型变量。首先有几个简单的辅助类:package generic;public class Person extends Animal { private String name; public Person(Strin原创 2015-06-08 15:43:24 · 3402 阅读 · 0 评论 -
Java泛型 泛型类型的继承规则
泛型类型的继承规则可能不能凭直觉的来想当然。下面举个例子来看看泛型类型的继承规则。首先有几个辅助类:package generic;public class Person extends Animal { private String name; public Person(String name) { super(); this.name = name; } pu原创 2015-06-08 16:04:27 · 4503 阅读 · 0 评论 -
Java反射(二)利用反射分析类的能力
利用反射分析类能力的类的源码如下(来源于《Java核心技术》卷一):package testreflection;import java.util.*;import java.lang.reflect.*;/** * 这个类利用反射打印出一个类的所有特征 * * @version 1.1 2004-02-21 * @author Cay Horstmann */publ原创 2015-06-26 21:35:39 · 1179 阅读 · 0 评论 -
Java 方法签名
方法的名字和参数列表成为方法的签名。注意,方法签名不包括方法的返回类型。本文通过测试理解参数列表的真正含义,以及在继承中重写方法时方法的返回值与父类中方法的返回值应该有怎样的关系。这里有三个辅助类:package methodsign;public class Ancestor {}package methodsign;public class Parent extend原创 2015-06-05 10:17:55 · 4635 阅读 · 0 评论 -
Java 创建泛型类型的数组
1.不能像下面这样直接利用泛型变量创建数组: T[] a = new T[];但可以先创建一个Object类型的数组,再强制类型转化为泛型数组: T[] a = (T[]) new Object[length];这条语句是对的,因为对于没有限定的类型变量,类型擦除后用Object代替T,上面语句变为:原创 2015-05-10 09:56:32 · 13562 阅读 · 1 评论