java
wangwangfish
这个作者很懒,什么都没留下…
展开
-
java-小心使用自动封装
自動裝箱與拆箱是編譯器在編譯時期為您作好一切的事情,是編譯蜜糖(Compiler sugar),這很方便,但在運行階段您還是瞭解Java的語義,例如下面的程式是可以通過編譯的:Integer i = null;int j = i;語法是在編譯時期是合法的,但是在運行時期會有錯誤,因為null表示 i 沒有參考至任何的物件實體,它可以合法的指定給物件參考名稱,但null值對於转载 2012-10-10 09:57:06 · 1921 阅读 · 1 评论 -
java-构造函数
在建構物件時,如果想要指定物件建立時的初始方式,可以定義類別的建構式。建構式像是與類別名稱同名,無需傳回值的方法。public class Some { private int a; private String text; public Some(int a, String text) { this.a = a; this.text转载 2012-10-12 16:43:13 · 555 阅读 · 0 评论 -
java-java初始化顺序
初始化(initialization)其实包含两部分:1.类的初始化(initialization class & interface)2.对象的创建(creation of new class instances)。因为类的初始化其实是类加载(loading of classes)的最后一步,所以很多书中把它归结为“对象的创建”的第一步。其实只是看问题的角度不同而已。为了更清楚的理解转载 2012-10-12 18:25:36 · 411 阅读 · 0 评论 -
java-String StringBuffer和StringBuilder的区别
String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结。在java中有3个类来负责字符的操作。 1.Character 是进行单个字符操作的,2.String 对一串字符进行操作。不可变类。3.StringBuffer 也是对一串字符进行操作,但是可变类。String:是对象转载 2012-10-10 15:08:21 · 441 阅读 · 0 评论 -
java-哪些东西会被JVM回收
對於不再有用的物件,Java有自動回收資源的機制。哪些東西會被垃圾收集器(Garbage Collector)認定為不再有用的物件?簡單地說,無法被JVM中任何執行緒透過參考名稱循線參考到的物件,就是GC認定的垃圾。在啟動JVM之後,JVM中就會有一些執行緒,最基本的,就是執行程式進入點的主執行緒(main thread),基本上,這條執行緒是你要關心物件是否成為垃圾的起點。假設你转载 2012-10-13 19:17:03 · 828 阅读 · 0 评论 -
java-垃圾回收
垃圾回收分为两大步骤:识别垃圾 和 回收垃圾识别垃圾有两大基本方法1.计数器法每个对象有一个相应的计数器,统计当前被引用的个数,每次被引用或者失去引用都会更新该计数器。优点:识别垃圾快,只需判断计数器是否为零。缺点:增加了维护计数器的成本,无法在对象互相引用的情况下识别垃圾因此,适用于对实时性要求非常高的系统。2.追踪法从根对象(例如局部变量)出发,逐一遍历它的引用转载 2012-10-13 20:28:24 · 693 阅读 · 0 评论 -
java-深入理解java GC与 finalize()
基本预备相关知识1 java的GC只负责内存相关的清理,所有其它资源的清理必须由程序员手工完成。要不然会引起资源泄露,有可能导致程序崩溃。2 调用GC并不保证GC实际执行。 GC不保证资源在任何特定的时间都能释放,除非调用 Close 方法或Dispose 方法。3 finalize抛出的未捕获异常只会导致该对象的finalize执行退出。 protected转载 2012-10-13 20:31:10 · 1206 阅读 · 0 评论 -
java-适配器模式
有三种:类适配器模式、对象适配器模式、缺省适配器模式适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。--------------------------------------------------------------------------------适配器模式的用途 用电器做例子,笔记本电脑的插头转载 2012-10-16 10:22:35 · 559 阅读 · 0 评论 -
java-组合接口中的名字冲突问题
组合接口时的名字冲突===========================组合接口时的方法冲突========================在实现多重继承时,可能会碰到一个小陷阱:当一个类同时implements 接口1与接口2时,假如接口1与接口2同时都有一个相同方法签名(即方法的名字,参数,不包括返回类型)的方法时,如果在类中没有再定义该方法,编译器就会报错!看个例子:i转载 2012-10-16 09:53:06 · 2763 阅读 · 6 评论 -
java-内部类
重新来认识一下内部类的区别1Static member class(静态成员类)类声明中包含“static”关键字的内部类。如以下示例代码,Inner1/Inner2/Inner3/Inner4就是Outer的四个静态成员类。静态成员类的使用方式与一般顶层类的使用方式基本相同。public class Outer{ //just like static me转载 2012-10-16 11:38:30 · 458 阅读 · 0 评论 -
java-sleep()和wait()的区别
1、这两个方法来自不同的类分别是Thread和Object 2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。 3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在 任何地方使用(使用范围) synchronized(x){ x.notify() //或者w转载 2012-10-19 18:18:57 · 645 阅读 · 0 评论 -
java-非阻塞算法简介
在不只一个线程访问一个互斥的变量时,所有线程都必须使用同步,否则就可能会发生一些非常糟糕的事情。Java 语言中主要的同步手段就是synchronized 关键字(也称为内在锁),它强制实行互斥,确保执行 synchronized 块的线程的动作,能够被后来执行受相同锁保护的synchronized 块的其他线程看到。在使用得当的时候,内在锁可以让程序做到线程安全,但是在使用锁定保护短的代转载 2012-10-19 19:39:39 · 550 阅读 · 0 评论 -
java-正确使用volatile变量
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。本文介绍了几种有效使用 volatile 变量的模式,并强调了几种不适合使用 volatile 变量的情形。锁提供了两种主要特转载 2012-10-19 18:57:15 · 615 阅读 · 0 评论 -
java-多线程发展史
转载http://raychase.iteye.com/blog/1679131引言首先问这样一个问题,如果提到Java多线程编程,你会想到什么?volatile、synchronized关键字?竞争和同步?锁机制?线程安全问题?线程池和队列?好吧,请原谅我在这里卖的关子,其实这些都对,但是又不足够全面,如果我们这样来谈论Java多线程会转载 2012-10-19 19:42:02 · 1594 阅读 · 0 评论 -
java-浅层复制和深层复制
测试目标:1、 什么是浅层复制2、 什么是深层复制浅层复制 1、 创建一个TestObj对象,然后给此对象赋值。2、 再生成一个克隆对象,比较此克隆对象与被克隆的对象各属性值。新建测试入口类TestCloneable.java:public class TestCloneable{private static TestCloneable testClonea转载 2012-10-20 16:04:22 · 1845 阅读 · 1 评论 -
java-截取字符串的substring和substr
java里截取字符串的方法有substring和substr,它俩的区别和各自的用法具体是什么呢?现在总结如下:1.substring方法,yM.M\ lt.`B Y0 定义和用法 substring 方法用于提取字符串中介于两个指定下标之间的字符。 语法 stringObject.substring(start,stop) 参数 描述转载 2012-10-22 08:42:30 · 16521 阅读 · 0 评论 -
理解java多态性
深入理解java多态性(一)相关类class A ...{ public String show(D obj)...{ return ("A and D"); } public String show(A obj)...{ return (转载 2012-10-24 10:24:08 · 552 阅读 · 0 评论 -
java-字符串
在Java中,要建立字串很方便:String str = "Java";依Java命名慣例而言,String這個名稱首字大寫,無疑地應該是個類別,這代表了,str是參考至一個String的實例。有些書會說,這個寫法其實等同於以下的寫法,而且這樣有建立物件的明確語義:String str = new String("Java");這並不是全部的事實。這句話比較转载 2012-10-12 14:49:17 · 429 阅读 · 0 评论 -
java-Promotion与cast
如果你寫個程式片段:double PI = 3.14;這沒有問題,但如果你寫個程式片段:float PI = 3.14;你會得到一個possible loss of precision的編譯錯誤!如果你要通過編譯,你必須這麼寫:float PI = (float) 3.14;這就是所謂的CAST,編譯器在編譯時,就會雞婆地換成這個:转载 2012-10-12 15:14:51 · 857 阅读 · 0 评论 -
package与存取权限
在Java 語法中,有三個存取修飾:public、protected與private。但事實上,有四個權限範圍即还有包访问权限(有时也表示成为friendly)。如果你在宣告類別時沒有加上任何存取修飾,則預設為package存取範圍,該類別僅限於同一個package下的成員所使用。如果宣告類別成員(資料成員或方法成員)時沒有加上任何存取修飾,則預設為package存取範圍,該類別成員僅限於转载 2012-10-12 10:48:11 · 698 阅读 · 0 评论 -
java-二维数组
一維陣列使用陣列名稱與一個索引值來指定存取陣列元素,您也可以宣告二維陣列,二維陣列使用陣列名稱與兩個索引值來指定存取陣列元素,其宣告方式與一維陣列類似:int[][] arr = {{1, 2, 3}, {4, 5, 6}};從上面這個程式片段來看,就可以清楚的看出二維陣列的索引方式,您宣告了2列(Row)3行(Column)的陣列,转载 2012-10-10 10:08:28 · 808 阅读 · 0 评论 -
java-String 类别
由字元所組成的一串文字符號,稱之為字串,在Java中字串可以使用String類別來建構,例如您可以使用以下的方式來宣告並初始一個字串變數:String text = "字串的使用";注意字串的直接指定必須使用"",而字串是使用Unicode字元來建構,在建構一個字串物件變數之後,您可以直接在輸出串流中指定變數名稱來輸出字串,例如:System.out.println转载 2012-10-10 14:25:26 · 635 阅读 · 0 评论 -
java-不可变字符串
一個字串物件一旦被配置,它的內容就是固定不可變的(immutable),例如下面這個宣告:String str = "caterpillar";這個宣告會配置一個長度為11的字串物件,您無法改變它的內容;別以為下面這個宣告就是改變一個字串物件的內容:String str = "just";str = "justin";事實上,在這個程式片段中转载 2012-10-10 14:31:13 · 450 阅读 · 0 评论 -
java-foreach
J2SE 5.0新增foreach的語法,它可以應用於陣列的循序存取上,其語法如下:for(type element : array) { System.out.println(element)....}例如傳統上循序存取一個陣列的方式如下:int[] arr = {1, 2, 3, 4, 5};for(int i = 0; i System.转载 2012-10-10 15:19:17 · 398 阅读 · 0 评论 -
java-什么是JRE
來看看第一個Java程式:public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); }}這段程式執行的動作是請作業系統(System)的標準輸出(out)顯示一行文字(println)叫"H转载 2012-10-10 15:29:00 · 766 阅读 · 0 评论 -
Java引用类型
Java有四种引用类型,strongreference,softreference,weakreference,phantomreference。这四种引用的强度按照上面的顺序依次减弱,下面通过几个例子简单了解一下这四种引用类型。 StrongReference 这个不用多讲了,这是java默认的引用类型,如果不特意使用java.lang.ref下的类,转载 2012-10-09 20:48:53 · 478 阅读 · 0 评论 -
java-java.math.BigDecimal
如果在java中使用浮点数,则默认为double。如果需要使用float,在浮点数后面加f。Java代码 public class Test { public staticvoid main(String[] args) { System.out.print("直接输出2.4:"); System.ou转载 2012-10-09 20:57:37 · 535 阅读 · 0 评论 -
java-什么是CLASSPATH
假設你在C:\workspace下寫了個HelloWorld.java,並順利使用編譯器javac將之編譯為HelloWorld.class,在不切換路徑的情況下,可以直接執行java HelloWorld來載入HelloWorld.class並運行當中所定義的行為。如果你切換到C:\底下或是其它路徑底下,那麼該如何載入HelloWorld.class並執行呢?以下並不是正解:ja转载 2012-10-10 15:39:47 · 821 阅读 · 0 评论 -
java-鸡生蛋?蛋生鸡?
在 你執行的是哪個 JRE?中有提到一段:JDK中多數工具程式,本身就是用Java寫的。很有趣不是嗎?Java原始碼需要編譯器編譯為.class檔,而這邊卻跟你說Java編譯器是Java寫的?這不是雞生蛋還是蛋生雞的問題嗎?是先有Java編譯器,還是先用Java寫個編譯器?答案是先有原生編譯器,一開始編譯器是可能使用C寫的,而後用Java程式碼寫個編譯器,用原生編譯器來編譯Ja转载 2012-10-11 09:58:45 · 1164 阅读 · 0 评论 -
java-使用package分类管理
一個應用程式中會有多個類別彼此合作,也有可能由多個團隊共同分工,完成應用程式的某些功能塊,再組合在一起。現在你所撰寫的類別,編譯出來的.class都放置在同一個資料夾下,這不是個很好的管理方式。就如同你會分不同的資料夾來放置不同作用的檔案,你的類別也應該分門別類加以放置。如果你的應用程式是多個團隊共同合作,若不分門別類放置.class,那麼若A部門寫了個Util類別並編譯為Util转载 2012-10-11 10:26:13 · 1162 阅读 · 0 评论 -
java-System.in.read()方法与java.util.Scanner类的读取输入差别
执行System.in.read()方法将从键盘缓冲区读入一个字节的数据,然而返回的16位的二进制数据,其低8位为键盘的ASCII码,高8位为0Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序。它是以前的StringTokenizer和Matcher类之间的某种结合。由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索转载 2012-10-09 16:33:58 · 6096 阅读 · 0 评论 -
java-引用与对象
我们先定义一个简单的类: class Vehicle { int passengers; int fuelcap; int mpg; }有了这个模板,就可以用它来创建对象: Vehicle veh1 = new Vehicle();转载 2012-10-09 21:18:44 · 453 阅读 · 0 评论 -
java-执行哪个JRE
因為種種的原因,你的電腦中可能不只存在一套JRE!你可以試著搜尋電腦中的檔案,例如在Windows中搜尋java.exe,可能會發現到多個java.exe檔案,某些程度上,你可以將一個java.exe視作就是有一套JRE!就算你是乾乾淨淨的電腦,在安裝好JDK後,如果有選擇一併安裝Public JRE,則至少會有兩套JRE存在你的電腦中,一個是JDK本身附的Private JRE,一個是你转载 2012-10-11 09:45:03 · 2101 阅读 · 0 评论 -
java-.class文档与JDK版本问题
如果你在新版本的JDK上開發程式,編譯過後的.class檔案,在舊版本的JRE上執行,將會發生以下的錯誤訊息:上面的執行範例中,是在JDK6下編譯出.class,切換PATH至JDK1.4,使用其JRE1.4來載入、執行.class,結果出現UnsupportedClassVersionError,並指出這個.class的major.minor為50.0。編譯器對於每個.cla转载 2012-10-11 10:07:44 · 970 阅读 · 0 评论 -
java-使用import
在 使用 package 分類管理中說明過,當你在定義類別時,使用package關鍵字宣告,package就成了類別完整名稱的一部份。如果要使用java指令執行時,就必須指定完整類別名稱,例如使用 package 分類管理 中的指令:java cc.openhome.Main如果在撰寫程式時,若需要使用某個package管理下的類別,基本上也必須指定完整名稱,例如:转载 2012-10-11 10:43:46 · 680 阅读 · 0 评论 -
java-PATH是什么
如果你寫了第一個HelloWorld.java:public class HelloWorld { public static void main(String[] args) { System.out.println("Hello!World!"); }}接下來打算編譯這個.java,編譯器的指令是javac。若這是電腦中第一次裝完JDK,在沒有转载 2012-10-11 09:52:44 · 921 阅读 · 0 评论 -
java、c\c++的函数比较
C++ Java虚函数 -------- 普通函数纯虚函数 -------- 抽象函数抽象类 -------- 抽象类虚基类 -------- 接口转载 2012-10-24 21:32:49 · 544 阅读 · 0 评论