1、本站首页 网络学院 资料搜索 下载中心 资源链接 网站地图 本站留言 本站论坛 加入收藏夹 设为主页 XML RSS 2.0 切換到繁體中文 .Net技术库 Asp技术库 JAVA使用技巧 PHP技术库 Delphi技术库 C/C+开发 VB使用技巧 AJAX技术库 XML/WML技术库 加密解密算法 程序设计技巧 数据库使用技巧 服务器配置技巧 LINUX使用技巧 计算机使用技巧 精品软件下载 专题导读: A VB.Net C# C+.Net .Net类库 C语言 C+ VC J2se J2ee J2me JSP JavaScript技巧 Hibernate CSS XML WML WAP
2、WebService 正则表达式 设计模式 移动开发 SQL Server数据库 Oracle数据库 Mysql数据库 水晶报表 网络安全专区 您的位置: 网络大本营 网络学院 JAVA使用技巧 JAVA概念总结 JAVA概念总结 作者: 来源网络 发布日期: 2006-6-15 1:20:06 查看数: 250 网站信息检索 输入关键字 全部内容 搜索推荐此文章给朋友 原创认证 保存此页收藏此页 发送到QQ/MSM 加入MyBox收到ViVi 收到365Key 收到天极到论坛讨论此问题 纠正本文错误最新动态Systronix JStamp Native execution embedded
3、Java Real Fast - Real Small - Real Java Trispark JavaDicomToolkit A Java SDK for building dicom applications Telnet Java Component Easily add Telnet to your java apps Free Download Java Programming Tool Generate Java From UML Models. Save Time s+=”def”;System.out.println(s); s=new String(“abc”);s
4、.concat(“def”);System.out.prinln(s); 前一程序打印为“abcdef”,后一程序打印为“abc”。区别是第一个程序又重新赋值给了s。而第二个程序中s.concat(“def”)只是产生了一个新的对象但没有赋给谁,但原来的s不变。 另外,对于StringBuffer而言是可变的,对它的任何改变都是实时的。 页码,6/17JAVA概念总结_JAVA使用技巧_网络大本营2008-11-19http:/ 文件使用 “pdfFactory Pro“ 试用版本创建 包装类 包装类是为了方便对基本数据类型操纵而出现的。有了包装类就可以用很多的方法来操纵基本数据类型(没有包装
5、类想直接对基本数据类型操作是不方便的,除非自己编写方法)。 要熟悉包装类应该着种理解下面几点: a包装类的构造器。一般说来,包装类的构造器参数有两种:基本数据值、字符串 注意:Boolean包装类构造器当传入字符串时,除了不分大小写的true返回true外,其它字符串一律返回false b常见的操作方法。例如:转换为本基本类型或其它基本类型的方法 eg. byteValue(),intValue();parseByte(String s),parseInt(String s) cvalueOf(各基本类型或字符串)的使用。ValueOf(str)是包装类的静态方法,作用等同于构造器。它会解析传
6、入的参数,然后构造一个相同类型的包装类,并返回该包装类。 例子:原始类型字符串 (new Integer(101).toString();String.valueOf(“101”) 字符串(包装类)原始类型 Integer.parseInt(“string”); (new Integer(“101”).doubleValue();Integer.valueOf(“101”).intValue() Math类 Math类中都是静态方法。其中最易错的是三个方法:ceil(),floor(),round() 另外还需注意,有许多方法随基本数据类型不同有多个重载版本。eg.abs(),max() ac
7、eil()方法。该方法返回类型为double,往单一的正坐标方向取最近的整数 bfloor()方法。该方法返回类型类double,取最靠近其负向的整数。 cround()方法。它有两个重载版本:double和float,返回分别为long和int long round(double a);int round(float) round()方法Math.floor(a+0.5),这意味着正数5入,负数6入 页码,7/17JAVA概念总结_JAVA使用技巧_网络大本营2008-11-19http:/ 文件使用 “pdfFactory Pro“ 试用版本创建 eg.System.out.println
8、(Math.ceil(Double.MIN_VALUE) /1.0 System.out.println(Math.floor(-0.1) /-1.0 System.out.println(Math.round(-9.5) /-9 System.out.println(Math.round(-9.6) /-10 System.out.println(Math.round(Double.MIN_VALUE) /0 collection类 collection类提供了持有对象的便利性,并对持有对象的操作便利性。正如其名,收集意为将各种类型的对象收在一起,且数目不限(有点像收集袋)。收集会将放入其中
9、的所有对象均视为Object(向上转型),所以在取出元素对象时,必须显式(即强制转型)指出其类型。 对象收集从整体上分为Collection接口和Map接口。这种分类的标准是:某个元素位置上放置元素对象的个数。显然,Map接口放置的是一对。 Collection接口又可扩展为两个基本接口:List接口和Set接口。 依上所述,对象收集可以划分为四个基本的类型:Collection、List、Set、Map Collection 它是一个基类的接口,对元素没有任何的限制,可以重复并且无序。 List 从其名就知是有序的列表。它描述的是按顺序将对象放入其中。显然,后放入的元素有可能与先前放入的对象
10、是相同的。所以,List是允许对象重复出现的有序列表。 Set 其实就是数学上所说的集合,它不允许有重复的元素。其中可以有空集(即null对象)。Set中的元素不要求有序。 Map 即映射,借助于key和value来描述对象的搜索。key域中要求唯一性(其实就是一个Set),value域可以允许有重复的元素(其实就是一个Collection)。另外注意:常见的HashMap是无序的,而TreeMap是有序的。 标识符 页码,8/17JAVA概念总结_JAVA使用技巧_网络大本营2008-11-19http:/ 文件使用 “pdfFactory Pro“ 试用版本创建 a所有标识符的首字符必须是
11、字母(大小写)、下划线_、美元符号$(或符号¥) b接下来的可以是由数字(0-9)及首字符相同类型的字符(字母、_、$),其它任何特殊字符均不可 c标识符不能使用Java关键字和保留字(50个)。但是注意像java,Integer,sizeof,friendly等都不是Java的关键字 d标识符大小写是敏感的,但没有长度的限制。 Switch(i) aswitch(i)中的参数最高精度是int(或者short,byte,char),但不可是long,float,double bdefault语句可以放置于任何地方(default意为都不匹配case中的值) c 当语句中未加break语句时,则
12、程序会从匹配的地方开始执行(包括匹配default语句),接下来所有的语句都会被执行(而不管匹配否),直到遇到break语句或switch尾部。 垃圾收集 a只要一个对象失去了所有的reference,就可以考虑收集到垃圾收集堆了。 B当失去对一个对象的所有引用时,JVM只是考虑垃圾收集,但并不意味着就立刻收回这个对象的内存,甚至根本不收回。JVM仅会在需要更多的内存以继续执行程序时,才会进行垃圾收集。 C多数情况下,你永远不会知道垃圾收集什么时候会发生。Java将垃圾收集进程作为一个低优先级线程在运行。在Java中垃圾收集是不能被强迫立即执行的。调用System.gc()或Runtime.g
13、c()静态方法不能保证垃圾收集器的立即执行,因为,也许存在着更高优先级的线程。 D如果你想人工调用垃圾收集,并想在收集对象时执行一些你想要的任务,你就可以覆盖一个叫finalize()的方法。java会为每一个对象只调用一次finalize()方法。finalize()方法必须被申明为protected的,不返回任何值(viod),而且要申明抛出一个Throwable对象,并一定要调用超类的finalize()方法(super.finalize())。 eg.protected void finalize() throws Throwa页码,9/17JAVA概念总结_JAVA使用技巧_网络大本
14、营2008-11-19http:/ 文件使用 “pdfFactory Pro“ 试用版本创建 ble() super.finalize(); ; is a bassert expression1 : expression2; expression1是一条被判断的布尔表达式,必须保证在程序执行过程中它的值一定是真;expression2是可选的,用于在expression1为假时,传递给抛出的异常AssertionError的构造器,因此expression2的类型必须是合法的AssertionError构造器的参数类型。AssertionError除了一个不带参数的缺省构造器外,还有7个带单个
15、参数的构造器,分别为:object(eg.String) boolean char int long float double。第一种形式如果抛出异常,则调用AssertionError的缺省构造器,对于第二种形式,则根据expression2值的类型,分别调用7种单参数构造器中的一种。 Aassert程序的编译:javac -source 1.4 TestAssert.java(提示java按1.4版本编译) Bassert程序的运行:java ea TestAssert 或者 java ea:TestAssert TestAssert 其它的运行参数:java -ea:pkg0. Test
16、Assert;java esa;java dsa(系统类断言),另外,还可以同时组合用。当一个命令行使用多项 -ea -da 参数时,遵循两个基本的原则:后面的参数设定会覆盖前面参数的设定,特定具体的参数设定会覆盖一般的参数设定。 CAssertinError类是Error的直接子类,因此代表程序出现了严重的错误,这种异常通常是不需要程序员使用catch语句捕捉的。 D使用assert的准则:assert语句的作用是保证程序内部的一致性,而不是用户与程序之间的一致性,所以不应用在保证命令行参数的正确性。可以页码,11/17JAVA概念总结_JAVA使用技巧_网络大本营2008-11-19htt
17、p:/ 文件使用 “pdfFactory Pro“ 试用版本创建 用来保证传递给private方法参数的正确性。因为私有方法只是在类的内部被调用,因而是程序员可以控制的,我们可以预期它的状态是正确和一致的。公有方法则不适用。此外,assert语句可用于检查任何方法结束时状态的正确性,及在方法的开始检查相关的初始状态 等等。 assert语句并不构成程序正常运行逻辑的一部分,时刻记住在运行时它们可能不会被执行。 线程 线程是将程序中容易消耗大量cpu且易陷入死循环的片断代码独立出来作为一个线程来运行(也即线程是一个代码块)。 线程一经启动start,就会进入ready状态(实际上就是runnab
18、le状态,只是等待分配cpu)。这也说明线程并不会马上就running,其运行具有不确定性。线程启动后,只要不跳出run()方法,则一直都有机会running,它由系统自动在各线程间分配cpu时间来running。要牢记的是:线程运行与中断具有不确定性,你永远也不知道线程何时会运行,何时会中断。 线程从对象的角度来看,它自身也可以是一个对象。它可视为其它对象中的一个代码块。 在线程的概念中要特别注意几个概念:单线程、多线程、多线程的运行、多线程间的同步(资源访问)、多线程间的通信。 单线程 对于单线程而言,编写其程序是比较简单的,也比较容易理解,因为它并不涉及到synchronized和com
19、munication问题。创建单线程的方法有两种,其一、扩展Thread类,即class A extends Threadpublic void run();;其二、实现Runnable接口,class B implements RunnableThread t=new Thread(this);public void run();; 多线程相对于单线程而言,多线程会复杂很多,原因就是它们会涉及到多线程间的资源访问和多线程间通信问题。这就涉及到下面所说的三个方面:多线程的运行、多线程间的同步(资源访问)、多线程间的通信 多线程的运行 对于多个可运行runnable的线程页码,12/17JAVA
20、概念总结_JAVA使用技巧_网络大本营2008-11-19http:/ 文件使用 “pdfFactory Pro“ 试用版本创建 来说,运行与中断具有不确定性,永远也无法知道线程何时会运行,何时会中断。但是多线程运行也遵循几个原则:如果多个线程具有同样的优先级,则系统会在它们之间切换cpu时间运行;JVM基于优先级来决定线程的运行,但是这并不意味着一个低优先级的线程一直不运行。 多线程的同步 被线程可访问的每个对象都有一个仅被一个线程访问控制的锁,锁控制着对对象的同步码的存取。这个可被多个线程访问的对象就是所说的资源共享问题。 A在程序中,可以通过定义一个synchronized代码块或多个s
21、ynchronized方法来使得调用的线程获得该对象的控制锁。通过获得对象的锁,该线程就会阻止其它线程对该对象所定义的同步块或同步方法进行操作(特别注意的是,此时并不能保证其它线程对该对象的非同步变量和非同步方法进行操作)。 B线程只有在同步块或同步方法返回后才释放锁。 Csynchronized并不能保证程序的运行连续性,而只是保证同一性。也就是说即使在synchronized块或方法中,线程的运行仍旧会有中断的可能性。尽管如此,但它却能确保别的线程不会再访问该对象的其它同步块和方法,因为对象锁并未释放。这一事实说明了“多线程的运行”与“多线程间的同步”是两个独立的概念。 D多线程的同步块或
22、方法可以放在任何可被线程访问的对象中(包括线程本身,它实际上也可被其它的线程访问)。 多线程间的通信多线程间的同步消除了一个线程在改变另一个线程的稳定对象状态时发生的并发错误,但是就线程间通信而言,同步不起任何作用,也就是说“多线程间的通信”又是一个独立的概念。多线程间的通信通常是靠wait(),notify()两个方法来实现的,有关这两个方法的总结如下: 1.wait(),notify()属于object方法,并不是线程的方法 2.object.wait() 意为:调用我(指该object)的当前线程你得等等,也就是 使.(调用我的当前线页码,13/17JAVA概念总结_JAVA使用技巧_网
23、络大本营2008-11-19http:/ 文件使用 “pdfFactory Pro“ 试用版本创建 程).等待 object.notify()意为:该唤醒其它先前调用过我的且在等待的线程 从上述意义可知,wait(),notify()的对象是指线程所要用到的共享对象(当然共享对象也可以是线程对象),但是它的方法动作却是针对调用它的线程。(通常情况下,对象的方法是作用于自己的属性,而很少作用于其它对象。若要作用于其它对象,则用调用object.method()) 3.wait(),notify()必须成对出现,出现的方式可有3种形式。 A.wait(); notify(); B.wait();.
24、 object.notify(); C.notify();. object.wait(); 4.wait(),notify()必须出现在synchronized方法或块中,否则会出现异常。原因是因为wait()会释放对象锁,而锁必然是出现在同步方法或块中。另外,wait()同sleep()一样,也必须捕捉异常InterruptedException。 5.wait(),notify()的执行一般与外在的条件有关,只有条件改变了才触发唤醒等待的线程。这种条件的改变通常是以旗标(Tag)的方式出现,也即当某一方法执行完后,应当立即改变旗标值。假若需要让线程交替执行,则还需要加入互斥条件的判断。eg
25、.同步方法1中if(a),则同步方法2中if(!a) 6.当执行完notify()时,程序并不会立即去运行调用wait()的线程,而直到释放notify()的对象锁。当释放完锁后,程序重新分配cpu,要注意的是,此时系统并不一定就让wait的线程去运行,而有可能是刚才调用notify()的线程接着继续运行。这一点正说明了线程运行与中断的不确定性。 7.一般说来,notify()是唤醒等待池中等待时间最长的线程;而notifyAll()是唤醒等待池中所有等待线程,然后线程去竞争对象锁。这里说的是一般情况,有时情况并非如此,这是由系统中线程运行与中断的不确定性决定的。 8.wait(),notif
26、y()通常情况下需要sleep()的配合,否则屏幕中的运行显式会“飞速”。 9.多线程间的通信会出现死锁现象,即wait的线程页码,14/17JAVA概念总结_JAVA使用技巧_网络大本营2008-11-19http:/ 文件使用 “pdfFactory Pro“ 试用版本创建 有可能永远也得不到对象锁。 - 其他注意问题 数组 a数组在使用之前,必须要保证给其分配内存(系统会用默认值初始化),不可只定义。否则编译通过运行也会出现空指针错误。分配内存只需通过new就可以了。 b 二维数组的第二维可以是变长的,而且可以在定义时不指定具体值。这意味着java中的二维数组不必像矩阵那样要求每一维长度
27、都相同。 变量赋值 a实例变量 只可在定义时显式赋值,不可先定义,再赋值(这样的话编译出错)。 b方法变量 既可以在定义时显式赋值,又可以先定义以后再赋值。 cstatic变量可以在类的任何地方赋值(若在方法中赋值,实际上是重赋值了)。 dfinal变量可以在任何地方赋值,但是一旦赋值,就不允许再次重赋值。 estatic final变量 只能在定义处赋值(即:常量)。 移位 a 首位的拷贝右移位。等同于有符号的除法。 b 零填充右移位。 c32 32任何移多少位都是移模32的余数。eg.移32位即不移。 byte、char和int 由于char的取值范围和int的正取值范围相同,所以,整型字
28、面量可以直接赋给char。但是要是明确将一个整型(int)变量直接赋给char变量则编译错误。 另外,int i=5;char c=a;c+=i;编译是通过的。 byte类型在强制转型的情况下,当范围超出时会循环溢出。 页码,15/17JAVA概念总结_JAVA使用技巧_网络大本营2008-11-19http:/ 文件使用 “pdfFactory Pro“ 试用版本创建 求模% 求余只管左边的符号,右边不管。 eg. int a=-5;int b=-2;System.out.println(a%b) /-1 int a=-5;int b=2;System.out.println(a%b) /-1 int a=5;int b=-2;System.out.println(a%b) /1 - 【打印】 字体 【大】 【中】 【小】 【关闭】上下页导航 上一页:java接口-scjp 下一页:JDBC执行存储过程得到多结果集 本页地址: http:/ (欢迎向朋友推荐此网址)注意:本站所有文章来自互联网,版权归原作者所有,如有侵权,请来 信告知! 页码,16/17JAVA概念总结_JAVA使用技巧_网络大本营2008-11-19http:/ 文件使用 “pdfFactory Pro“ 试用版本创建