`
strong_fee
  • 浏览: 178609 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

读《Java核心技术卷I 》Java特色<第四章>

    博客分类:
  • Java
阅读更多

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)  DataGregorianCalendar的变换(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中的importpackage相当于C++中的usingnamespace指令。

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/classdirc:\classes

         2)   当前目录

         3)   jar文件,如/home/user/archives/archive.jarc:\archives\archive.jar

运行时库(jre/libjre/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的部分只能被定义在它们的类实用。如果没有指定publicprivate,那么这部分可以被同一个包中的所有类实用。

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)   将职责过多的类进行分解。

分享到:
评论

相关推荐

    数据库基础测验20241113.doc

    数据库基础测验20241113.doc

    微信小程序下拉选择组件

    微信小程序下拉选择组件

    DICOM文件+DX放射平片-数字X射线图像DICOM测试文件

    DICOM文件+DX放射平片—数字X射线图像DICOM测试文件,文件为.dcm类型DICOM图像文件文件,仅供需要了解DICOM或相关DICOM开发的技术人员当作测试数据或研究使用,请勿用于非法用途。

    Jupyter Notebook《基于双流 Faster R-CNN 网络的 图像篡改检测》+项目源码+文档说明+代码注释

    <项目介绍> - 基于双流 Faster R-CNN 网络的 图像篡改检测 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

    使用epf捕获没有CA证书的SSLTLS明文(LinuxAndroid内核支持amd64arm64).zip

    c语言

    (源码)基于Arduino的天文数据库管理系统.zip

    # 基于Arduino的天文数据库管理系统 ## 项目简介 本项目是一个基于Arduino的天文数据库管理系统,旨在为Arduino设备提供一个完整的天文数据库,包括星星、星系、星团等天体数据。项目支持多种语言的星座名称,并提供了详细的天体信息,如赤道坐标、视星等。 ## 项目的主要特性和功能 星座目录包含88个星座,提供拉丁语、英语和法语的缩写和全名。 恒星目录包含494颗亮度达到4等的恒星。 梅西耶目录包含110个梅西耶天体。 NGC目录包含3993个NGC天体,亮度达到14等。 IC目录包含401个IC天体,亮度达到14等。 天体信息每个天体(不包括星座)提供名称、命名、相关星座、赤道坐标(J2000)和视星等信息。 恒星额外信息对于恒星,还提供每年在赤经和赤纬上的漂移以及视差。 ## 安装使用步骤 1. 安装库使用Arduino IDE的库管理器安装本项目的库。 2. 解压数据库将db.zip解压到SD卡中。

    (源码)基于JSP和SQL Server的维修管理系统.zip

    # 基于JSP和SQL Server的维修管理系统 ## 项目简介 本项目是一个基于JSP和SQL Server的维修管理系统,旨在提供一个高效、便捷的维修管理解决方案。系统涵盖了从维修订单的创建、管理到配件的录入、更新等多个功能模块,适用于各类维修服务行业。 ## 项目的主要特性和功能 1. 用户管理 管理员和客户的注册与登录。 管理员信息的管理与更新。 客户信息的创建、查询与更新。 2. 维修订单管理 维修订单的创建、查询与更新。 维修回执单的创建与管理。 3. 配件管理 配件信息的录入与更新。 配件库存的管理与查询。 4. 评价与反馈 客户对维修服务的评价记录。 系统反馈信息的收集与管理。 5. 数据加密与安全 使用MD5加密算法对用户密码进行加密存储。 通过过滤器实现登录验证,确保系统安全。 ## 安装使用步骤

    devecostudio-windows-3.1.0.501.zip

    HUAWEI DevEco Studio,以下简称DevEco Studio)是基于IntelliJ IDEA Community开源版本打造,为运行在HarmonyOS和OpenHarmony系统上的应用和服务(以下简称应用/服务)提供一站式的开发平台。 作为一款开发工具,除了具有基本的代码开发、编译构建及调测等功能外,DevEco Studio还具有如下特点: - 高效智能代码编辑:支持ArkTS、JS、C/C++等语言的代码高亮、代码智能补齐、代码错误检查、代码自动跳转、代码格式化、代码查找等功能,提升代码编写效率。更多详细信息,请参考[编辑器使用技巧] - 低代码可视化开发:丰富的UI界面编辑能力,支持自由拖拽组件和可视化数据绑定,可快速预览效果

    《计算机视觉技术》实验报告-8.1提取车辆轮廓

    《计算机视觉技术》实验报告-8.1提取车辆轮廓

    springboot小徐影城管理系统(代码+数据库+LW)

    随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多生活之中,随之就产生了“小徐影城管理系统”,这样就让小徐影城管理系统更加方便简单。 对于本小徐影城管理系统的设计来说,系统开发主要是采用java语言技术,在整个系统的设计中应用MySQL数据库来完成数据存储,具体根据小徐影城管理系统的现状来进行开发的,具体根据现实的需求来实现小徐影城管理系统网络化的管理,各类信息有序地进行存储,进入小徐影城管理系统页面之后,方可开始操作主控界面,主要功能包括管理员:首页、个人中心、用户管理、电影类型管理、放映厅管理、电影信息管理、购票统计管理、系统管理、订单管理,用户前台;首页、电影信息、电影资讯、个人中心、后台管理、在线客服等功能。 本论文主要讲述了小徐影城管理系统开发背景,该系统它主要是对需求分析和功能需求做了介绍,并且对系统做了详细的测试和总结。具体从业务流程、数据库设计和系统结构等多方面的问题。望能利用先进的计算机技术和网络技术来改变目前的小徐影城管理系统状况,提高管理效率。

    C++与Matlab实现SIFT特征提取算法+项目源码+文档说明+代码注释

    <项目介绍> - SIFT特征提取算法C++与Matlab实现 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

    (1991-2024年)国家自然、社科基金部分名单(含部分标书)(最新!!!)

    数据介绍 数据名称:国家自然、社科基金部分名单 数据年份:1991-2024年 样本数量:10万+ 数据格式:PDF、excel

    卓晴-信号与系统课件.pdf

    卓晴

    as-bundled-clients

    as-bundled-clients

    学习时最后的资料包括面试等信息

    学习时最后的资料包括面试等信息

    (源码)基于Spring Boot和Ant Design的雨选课系统.zip

    # 基于Spring Boot和Ant Design的雨选课系统 ## 项目简介 雨选课系统是一个基于Spring Boot和Ant Design框架构建的前后端分离的选课系统。该系统实现了学生选课、成绩查询、教师成绩修改、课程编辑、课程新增等功能。登录信息使用Redis存储,并支持课程图片的上传功能。 ## 项目的主要特性和功能 1. 用户登录与权限管理 学生、教师和管理员分别有不同的登录权限。 登录信息使用Redis进行存储。 2. 课程管理 学生可以查看可选课程列表,并进行选课和退选操作。 教师可以查看自己教授的课程,并修改学生成绩。 管理员可以编辑和新增课程。 3. 成绩管理 学生可以查询自己的成绩。 教师可以修改学生的成绩。 4. 图片上传 支持课程图片的上传和展示。 5. 日志记录 系统记录请求和响应的日志信息,便于问题追踪和性能分析。

    数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)

    数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目),含有代码注释,满分大作业资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业使用,该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅

    江苏镇江两座小桥的技术状况评估与维修建议

    内容概要:本文针对镇江市丹徒区辛丰镇的两座小型桥梁(大叶二组滚水坝桥与东联组桥)进行了详细的技术状况评定和现状调查。主要内容包括:桥梁的基本参数描述、桥梁各部分的具体检查结果以及存在的具体病害及其原因分析,同时依据《公路桥梁技术状况评定标准》对每座桥梁分别给出了综合评分和技术状况等级,并提出了具体的维护与修复建议。大叶二组滚水坝桥技术状况良好(2类),但需要解决桥面铺装裂缝和桥墩的混凝土剥落问题;而东联组桥则需重点关注桥面施工不完整及护栏损坏等问题。 适用人群:桥梁管理人员、维护工作人员及城市基础设施规划相关人员。 使用场景及目标:适用于中小跨度桥梁的常规检查与维修决策制定过程中,旨在帮助专业人士快速掌握桥梁的实际状态,确保桥梁安全可靠运行。 其他说明:文中附有多张实拍图片用于直观展示桥梁现状及存在问题。

    基于套接字API开发的高性能高稳定性跨平台MQTT客户端,可以在嵌入式设备FreeRTOS LiteOS RTThre.zip

    c语言

    【Unity 天气系统插件】Enviro 3 - Sky and Weather 高度可定制的云、雾和光照系统

    文件名:Enviro 3 - Sky and Weather v3.1.6b.unitypackage Enviro 3 - Sky and Weather 是一款功能强大的 Unity 插件,专门用于模拟逼真的天空、天气和环境效果。它适用于需要动态天气和日夜循环的游戏或应用,如开放世界 RPG、模拟类游戏等。Enviro 3 提供了大量的设置选项和自定义功能,帮助开发者在 Unity 中创建沉浸式的自然环境效果。 以下是 Enviro 3 - Sky and Weather 的一些关键特点和功能介绍: 1. 动态天气系统 天气变化:支持多种天气效果,如晴天、阴天、雨天、雪天、雾天、暴风雨等,所有天气效果可以动态切换,使游戏环境更加生动。 天气事件:允许开发者设置特定的天气事件,如风暴、雷电等,添加到游戏中的特殊场景或事件。 湿度与温度控制:可以根据天气变化动态控制湿度和温度,影响环境效果和玩家体验。 2. 日夜循环系统 动态时间系统:Enviro 3 支持实时的日夜循环,包括昼夜的过渡,太阳和月亮的运动轨迹。 光照调整:随着时间变化,Enviro 3 会自动调整环境光、

Global site tag (gtag.js) - Google Analytics