1. 命令行参数
如在控制台输入java Message –h cruel world
args的参数包含如下:
args[0]=”-g”
args[1]=”cruel”
args[2]=”world”
2. 面向对象
一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。new操作符的返回值也是一个引用。相当于C++中的对象指针。Java中的null相当于C++中的NULL。
3. 时钟类
(1) GregorianGalendar类扩展了Calendar类。
默认构造函数构造一个表示对象被创建时的日历对象。可以创建特定年月日的对象,如
new GregorianCalendar(1999,Calendar.December,32)或者
new GregorianCalendar(1999,11,32)
月份从0开始计数。也可以构造具有年月日时分秒的日历对象。
(2) 访问日历中的年月日等,如
int month=now.get(Calendar.MONTH);//得到的数为月数-1
int weekday=now.get(Calendar.DAY_OF_WEEK);
(3) 设置对象的状态,如:
deadline.set(Calendar.YEAR,2001);
deadline.set(Calendar.MONTH,Calendar.APRIL);
deadline.set(Calendar.DAY_OF_MONTH,15);
(4) 为给定的日历对象添加天数、星期数、月数等
deadline.add(Calendar.MONTH,3);
(5) Data与GregorianCalendar的变换(Date类无法操纵日历)
Data time=calendar.getTime();
calendar.setTime(time);
(6) 可以通过DateFormatSymbols类来获取别国语言的星期几的名称。
4. java的编译
(1) 文件名必须和ppublic类的名字相匹配,在一个源文件中,只能有一个公有类,但可以有任意数目的非公有类。
(2) 编译方法:
1) 通配符调用java编译器,如java Employee*.java,将编译所有以Employee开头的源文件。
2) javac EmployeeTest.java 由于EmployeeTest中使用了Employee,所以编译器将自动编译Employee类。
3) Employee number(“James Bond”,100,1950,1,1); 这条语句在C++中能够正常运行,但在java中不能运行。
5. java程序员应该注意的几个问题
(1) 不要编写返回引用可变对象的访问器的方法,因为在类外可以改变这个引用的状态,起不到访问器的作用。
(2) 一个方法可以访问所属类的所有对象的私有数据。例如:
Class Employee{
boolean equals(Employee other){
return name.equals(other.name);
}
}
6. (1) final:在创建变量之后,指能够为之赋值一次,此后再也不能改变它的值了。final可以应用于局部变量两、实例变量和静态变量。不过,在定义final变量时,可以不必初始化。
对于可变的类,使用final修饰符可能会对读者造成混乱,如
private final Date hiredate;仅仅意味着存储在hiredate变量中的对象引用在对象构造之后不能被改变,而并不意味着hiredate对象是一个常量,任何方法都可以对hiredate引用的对象调用setTime更改器。
而对于不可变的类,用final修饰符修饰则以为着它作为一个常量,如private final String name;
(2) static(用法如:private static int nextId=1)
类的所有实例共享同一个静态域,静态域属于类,而不属于任何对象。
(3) 类常量,如
public static final double PI=2.1415926;
(4) 静态方法
因为静态方法不能操作对象,所以不能在静态方法中访问实例域,但是,静态方法可以访问自身类中的静态域。如:
public static int getNextID(){return nextID;}
可以使用对象调用静态方法,但不建议这么用。
每一个类(不管类的权限如何)都可以有一个main方法,用来对类进行测试。
7. Java中方法参数的使用情况
(1) 一个方法不能修改一个基本数据类型的参数。
(2) 一个方法可以改变一个对象参数的状态。
(3) 一个方法不能让对象参数引用一个新的对象。
8. 方法重载:
返回类型不是方法签名的一部分,也就是说,不能有两个名字相同,参数类型也相同却返回不同类型值的方法。
9. 构造函数
(1) 如果类中提供了至少一个构造器,但是没有提供默认的构造器,那么在构造对象时若不提供构造参数就被视为不合法。默认构造函数中,数值型数据设置为0,布尔型数据设置为false,所有对象变量将设置为null。如果希望所有域拥有默认值,则可以提供下列格式的构造器:
public ClassName(){
}
(2) 显示域初始化,如:
class Employee{
private String name=“”;
}
域也可以通过调用方法来进行初始化:
class Employee{
static int assignId(){
int r=nextId;
nextId++;
return r;
}
private int id=assignId();
}
在C++中,不能直接初始化实例域,所有的域必须在构造器中设置。但是,有一种特殊的初始化器列表语法,如:
Employee::Employee(String n, double s):name(n),salary(s){
}
(3) 一个构造器调用同一个类的另一个构造器,如:
public Employee(double s){
this(“Emploee #”+nextId,s);
}
this构造函数只能写在第一行。
Java中的this等价于C++的this指针,但是C++中,一个构造器不能调用另一个构造器。
(4) 初始化块,如:
{
id=nextId;
nextId++;
}
调用构造器的具体处理步骤:
1) 所有数据域被初始化为默认值
2) 按照在类声明中出现的次序依次执行所有域初始化语句和初始化块
3) 如果一个构造器调用了另外一个构造器,则执行第二个构造器的主体。
4) 继续执行这个构造器的主体。
(5) 静态域初始化:
static int nextId=1;
使用静态的初始化块:
static{
Rondom generator=new Random();
nextId=generator.nextInt(1000);
}
(6) 当参数名与实例域名相同时,实例域被屏蔽,此时可以通过隐式参数来初始化实例域,如:
public Employee(String name,double salary){
this.name=name;
this.salary=salary;
}
10. 使用Java编写一个没有main方法的“Hello, World”程序:
public class Hello{
static{
System.out.println(“Hello, World”);
}
}
在静态初始化块的尾部调用System.exit(0)来避免main is not defined的错误。
11. 类的导入(import)
在所有的源代码的顶部,在package语句的后面。
(1) 采用两种方式访问另一个包中的公有类
其一,添加完整的包名,如 java.util.Date today=new java.util.Date();
其二,import语句导入一个特定的类或者整个包,如:import java.util.*;
或import java.util.Date
(2) 当导入的包中包含相同名称的类名时,使用这个类将出现编译错误,如:
import java.util.*;
import java.sql.*;
使用Date today=new Date()时出错。
此时,可以增加一个特定的import语句来解决这个问题,如
import java.util.*;
import java.sql.*;
import java.util.Date;
当需要同时使用两个包中的类时,则在每个类名前面加上完整的包名。
Java中的import和package相当于C++中的using和namespace指令。
12. 静态导入
添加一条指令,import static java.lang.System.*;
则可以可用System类的静态方法和静态域,而不必加类名前缀。
还可以导入特定的方法或域,如:
import static java.lang.System.out;
导入静态方法和静态域有两个实际的应用:
1) 算数运算,如import java.Math
sqrt(x,2)+pow(y,2);
2) 笨重的常量,如
if(d.get(DAY_OF_WEEK)==MONDAY)…
13. 将类放入包中(package)
(1) 如果没有在源文件中放置package语句,那么源文件中的类奖被放置在一个默认包中。
编译器对带有文件分隔符和扩展名.java的文件进行操作,而java解析器对带.分隔符的包进行操作。
(2) jre/lib目录下的rt.jar包含数千个运行时的类。
(3) 在UNIX下,类路径的不同项目之间是采用:分割的,Windows下采用;分隔,“.”表示当前目录。
类路径包括:
1) 基目录,如/home/user/classdir或c:\classes
2) 当前目录
3) jar文件,如/home/user/archives/archive.jar或c:\archives\archive.jar
运行时库(在jre/lib和jre/lib/ext目录下的rt.jar和一些其它的jar文件)会被自动搜索,所以不必将它们显示地列在类路径中。
类路径所列出的目录和归类文件是搜索类的起始点。
(4) 设置类路径,两种方法:
1) 为编译器和字节码制定-classpath选项,如:
javac –classpath /home/user/classdir:./:/home/user/archives.jar MyProg.java
也可以用-cp代替-classpath。
2) 设置CLASSPAT环境变量。
java5.0以后不必设置类路径就可以编译当前目录的类。
编译技巧:javac –d . Hello.java 将编译后的字节码文件直接加到package目录下。
(5) javac编译器总是在当前目录中查找文件,而java解释器仅在类路径中有“.”目录的时候,才查看当前目录。如果没有设置类路径,并不会产生什么问题,默认的类路径包含“.”目录。然而如果设置了类路径但忘记了包含“.”目录,程序仍然可以通过编译,但不能运行。
14. 包作用域
对于方法和域,标记为public的部分可以被任意的类实用,标记为private的部分只能被定义在它们的类实用。如果没有指定public和private,那么这部分可以被同一个包中的所有类实用。
15. 文档注释
(1) javadoc 应用程序(utility)从下面的一个特性抽取信息:
包、公有类和接口、公有的和受保护的方法、公有的和受保护的域
(2) 每个/**…*/文档注释在标记之后紧跟着自由格式文本,标记以@开始,如@author等。自由格式文本中,可以使用HTML修饰符,如用于强调的<em>…</em>,用于设置等宽打字机的<code>…</code>,用于着重强调的<strong>…</strong>以及包含图像的<img …>等。但是,不要用<h1>或<hr>,因为他们与文档的格式产生冲突。
(3) 如果文档中有到其它文件的链接,如图像文件,则应该把这些文件放到子目录doc-files中,javadoc将从源目录拷贝这些目录及其中的文件到文档目录中。
(4) 类注释:必须放在import语句之后,类定义之前。
(5) 方法注释:必须放在所描述的方法之前
常用标记:
1) @param variable description:向当前方法的“param”部分添加一个条目,可以占据多行。
2) @return description :向当前方法添加“return”部分
3) @throws class description :表示方法可以抛出异常
如:
/*
Raises the salary of an employee
@param byPercent the percentage by which to raise the salary
@return the amount of the raise
*/
puboic double raiseSalary(double byPercent){
}
(5) 域注释:只需要对公有域建立文档(通常指静态常量),如:
/**
The “Hearts” card suit
*/
public static final int HEARTS=1;
(6) 通用注释
下列标记用在类文档的注释中
1) @author name:产生一个“author”条目
2) @version text 产生一个“version”条目
下列标记用于所有的文档注释
3) @since text:text可以使引入特性的版本描述,如@since version 1.7.1
4) @deprecated text 对类、方法或变量增加一个不再使用的注释,text给出了取代的建议,如: @deprecated Use <code>setVisible(true)</code> instead
通过使用@see和@link标记,可以使用超级链接,链接到javadoc文档的相关部分或外部文档。
5) see reference:将在see also部分添加一个超级链接,可以用于类、方法中。
reference可以选择下列情形之一:
1_ package.class#feature label
如:@see com.horseman.Employee#raiseSalary(double)
2_ <a href=“...”>label</a>
如:@see <a href=”www.horseman.com/corejava.html”>The core home page</a>
如果省略了label,用户看到的锚的名称就是目标代码或URL。
3_ “text”
如:@see “core java2”
具有以@开头的必须放在一起。
@link 与@see同理。
(7) 包与概述注释
要想产生包注释,就需要在每一个包目录中添加一个package.html的文件。在标记<BODY>…</BODY>之间的所有文本都会被抽取出来。还可以为所有的源文件提供一个概述性的注释,这个注释被放置在一个名为overview.html的文件中,该文件为于所有包含源文件的父目录中。
(8) 注释的抽取
在源文件目录,执行下列命令:
javadoc –d docDirectory nameOfPackage,nameOfPackage,…
如果在默认包中,就应该执行:
javadoc –d docDirectory *.java
如果省略-d docDirecotry,则html文件提取到当前目录。
16. 类的设计技巧
1) 将数据设计为私有
2) 一定要对数据初始化。Java不对局部变量进行初始化,但是会对对象的实例域进行初始化。
3) 不要在类中使用过多的基本数据类型,可以用其他的类代替多个相关的基本数据类型的使用。
4) 将职责过多的类进行分解。
分享到:
相关推荐
《Java核心技术卷Ⅱ高级篇》是Java编程领域的一本经典教材,主要涵盖了Java平台标准版(Java SE)的核心技术和高级特性。这本书的第八版针对Java的最新版本进行了更新,确保了内容的时效性和实用性。中文版的出版...
《Java核心技术 卷1 基础知识》是Java编程领域的经典教材,原书第10版由(美)凯 S.霍斯特曼(Cay S. Horstmann)撰写,由北京机械工业出版社出版。这本书是Java程序员的必备参考资料,涵盖了Java语言的基础知识,...
《Java核心技术 卷1 基础知识 原书第9版》是Java开发者必读的经典之作,全面深入地涵盖了Java编程的基础概念和技术。这本书是Java开发人员、学习者和爱好者的重要参考资料,旨在帮助读者掌握Java编程的核心原理和...
《JAVA2核心技术第1卷.基础知识7th_P2》是一本深入探讨Java编程语言核心概念的权威教材。这本书涵盖了从第九章至附录的内容,旨在为读者提供全面且细致的Java学习指南。每一章被单独封装成一个PDF文档,便于读者按需...
《Java核心技术第八版源码大全》是一份宝贵的资源,涵盖了Java编程语言的多个核心领域。这份源码集合可以帮助开发者深入理解Java的内部机制,提升编程技能,并为实际项目开发提供参考。以下是对其中部分文件名的解读...
第4章:异常处理 异常处理是Java程序健壮性的重要组成部分。本章将介绍Java的异常体系,包括如何捕获和处理异常,使用try-catch-finally语句块,以及自定义异常的创建。学习者将学会编写能够正确处理错误情况的代码...
《JAVA核心技术--高级特征(第八版)--第二部分》是一本深度探讨Java编程语言高级特性的经典著作。本书主要聚焦在Java编程的高级层面,旨在帮助开发者掌握更高效、更复杂的技术,提升编程技能和解决问题的能力。以下是...
《Java程序设计实用教程(第四版)》是叶核亚编著的一本经典教材,针对初学者和进阶者提供了全面而深入的Java编程知识。这本书涵盖了Java语言的基础概念、语法特性以及实际应用,旨在帮助读者掌握Java编程的核心技能...
4. **Java.nio**: 非阻塞I/O(New Input/Output)包提供了更高效的I/O操作,尤其适用于多线程和网络编程。`ByteBuffer`、`CharBuffer`等缓冲区类允许以块为单位进行数据传输,`Channels`接口和`Selectors`类支持选择...
- **书名**:《Java核心技术 卷1 基础篇》第八版(Core Java Volume I Fundamentals 8th Edition) - **出版日期**:2007年9月 - **出版社**:Prentice Hall - **作者**:Cay S. Horstmann 和 Gary Cornell - **语言...
## 第4章 方法与函数 在这一章,我们将学习如何定义和调用方法,理解参数传递,以及了解静态与非静态方法的区别。还会探讨方法重载和递归调用的概念。 ## 第5章 数组 本章介绍数组的使用,包括一维数组、多维数组的...
=、>、<、>=、<=)的例题,这些基础知识是编写任何JAVA程序的基础。 控制流程是程序设计的关键部分,包括条件语句(if-else、switch)和循环结构(for、while、do-while)。通过解决书中关于这些话题的例题,学习者...
以上知识点详细阐述了《java开发实战经典》第二版中李兴华提供的课后习题答案所涉及的Java编程基础内容,覆盖了Java语言的核心概念和编程实践。这些知识点不仅适用于理解书本上的习题答案,而且对于深入学习Java语言...
第四章:类与对象 深入探讨面向对象编程,包括类的定义、对象的创建、封装、继承、多态等概念,以及访问修饰符的作用。 第五章:输入输出系统 介绍Java I/O流的概念,包括字节流和字符流,以及如何使用...
《JAVA实例技术手册第二版》是一本专注于Java编程实践的权威指南,旨在帮助读者深入理解和掌握Java编程语言。这本书的第二版在原有的基础上进行了更新和完善,涵盖了Java开发的最新技术和最佳实践,是Java开发者和...
根据给定文件的信息,我们可以提炼出以下关于《Core Java Volume I—Fundamentals》第十版的知识点: ### 一、书籍基本信息 - **书名**:《Core Java Volume I—Fundamentals》 - **作者**:Cay S. Horstmann - **...
第09章.ppt和第10章.ppt可能涵盖的是多线程编程,这是Java的一大特色。内容可能包括线程的创建、同步机制(如synchronized关键字和wait()、notify()方法),以及线程池和并发API的使用。 第11章.ppt可能涉及Java的...