- 考点01 源文件
- 规则01:源文件是一个包含Java代码的文本文件;以.java作为文件后缀名。源文件通过编译可以产生可执行的字节代码文件,即类文件。该源文件对应的类文件以.class作为文件后缀。该源文件中的字符必须满足Java语言的语法规定,否则在编译时会产生编译错误。
- 规则02:一个.java的文件只能有一个public类定义,可以有多个非public类定义。
- 规则03:源文件名必须满足Java语言标识符的规定。
- 补充:1、源文件的后缀必须是.java;2、如果一个类是public类,那么源文件名必须与这个类的名字完全相同,且扩展名是.java;3、源文件名可以不是主类名,但一定是public类名
- 规则04:一个源文件可以不包含任何代码定,即它是一个空文件,一个包含类定义的最小源文件的内容仅为class classname{}。
- 规则05:一个源文件中,存在public类定义,则该源文件名必须与public类名一致。没有public类定义,则该源文件,名可以随意命名,不需要与源文件中定义的任何类名一致,只要符合Java语言标识符规定即可。
- 规则06:一个Java源文件共有三种顶层元素,分别为package(包声明),import(输入语句),和class(类声明),这3种顶层元素并非必须同时出现,如果同时存在,则必须按package、import、class的顺序出现,即任何输入语句都出现再所有类定义之前。如果使用包声明,则声明必须出现在类和输入语句之前。
- 规则07:包是用来组织类的,再源文件中包声明通过关键字package后跟包类名称来实现。包名称由一系列句点作为分割符的路径名构成。由于包名称的构成元素映射的是系统路径名,所以包名的字符必须满足路径名的要求,例如不能包含/、\、;、*、?等字符。注意,一个源文件最多只能包含一个声明语句。如果源文件中没有包声明语句,则类被放置再默认的包中。
- 规则08:import语句用于引入其他包中的类,以供源文件中的代码使用。既可以引入一个明确指定的类,例如 import java.util.Dictionary,也可以通过*引入整个包中的所有类,例如 import Java.util.*。可以不要import语句而引用其他包中的类,但需要在使用类时写全其所在的包名。例如 Java.util.Date now = new Java.util.Date(),这正是应用import语句解决写全包名繁琐问题的所在。注意,import语句不同于包声明语句,在一个源文件中,import语句只能有一条,而包声明语句可以有多条,并用分号隔开。
- 规则09:如果是通过通配符*引入两个不同包中存在同名类,例如Java.util 和Java.sql包中都有一个date的类。当代码中不加包名直接使用date类时,则会产生编译错误,因为编译器无法确定哪个包中的同名类被使用。解决办法:1、明确引入要使用包中的类,2、在使用类时写全包名来明确调用。
- 规则10:Java.lang包是由系统自动引入,不需要明确引入就可使用其中的类。
- 规则11:注释语句可以单独占一行,也可以房子啊一行语句的后面。注释可以出现在源文件中3种顶层元素package、import、class之前。
- 补充:1、如果一个类中没有main方法,可以正常编译、调用,但是无法单独执行;2、private 不能用于顶层类,如果该顶层类为私有,那么就无法被访问,也就失去了存在的意义。
- 考点02 关键字和标识符
- 规则01:Java语言中共有51个关键字和保留字。
- abstract、boolean、brcak、bye、case、catch、char、class、const、continue、default、do、double、else、extends、false、final、finally、float、for、goto、if、implements、import、instanceof、int、interface、long、native、new、null、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw 、throws、transient、true、try、void、volatile、while
- 规则02:goto和const是保留字,尽管在Java语言中未被使用,但程序员不能使用其作为标识符。
- 规则03:Java语言中规定,标识符不能使用规定的关键字和保留字。并且标识符只能以字符、$或_开头,随后的字符只能是字母、$、和数字。
- 补充:‘-’、‘%’、‘#’不是Java中构成标识符的合法字符。不能以数字作为标识符的开头
- 规则01:Java语言中共有51个关键字和保留字。
- 考点03 基本数据类型
- 规则01:Java语言中共有8种基本类型,分别为布尔型(boolean)、字符型(char)、字节型(byte)、短整型(short)、整型(int)、长整型(long)、单精度型(float)、双精度型(double)。
- 规则02:8种基本数据类型的有效字节表示位数。
- 类型 有效字节数
- boolean 1
- byte 8
- char 16
- short 16
- int 32
- float 32
- long 64
- double 64
- 规则03:Java语言种boolean数据类型的取值只能为true或false,不像其他语言,例如C++,可以允许用整型值代替true或false。
- 规则04:Java语言种共有4种带符号的整数型基本数据类型,分别为byte、short、int、long。
- 规则05:4种带符号的整数基本数类型的取值范围也有规定。
- 类型 有效字节数 最小值 最大值
- byte 8 -2^7 2^7-1
- short 16 -2^15 2^15-1
- int 32 -2^31 2^31-1
- long 64 -2^63 2^63-1
- 规则06:Java语言种的char基本数类型属于整数型,但是无符号的整数型取值范围为0到2^16-1。
- 规则07:Java语言中的字符型时基于16位的统一字符集,不是基于7位的ASCII(美国信息交换标准代码)字符集。为了和ASCII字符集兼容,统一字符集包括了ASCII字符集,即用高9位为0的字符映射为ASCII字符集中对应编码的字符。也就是说,高9位位0,低7位和ASCII字符集中对应字符的编码一致。例如,65在ASCII字符集和统一字符集中均代表大写字母A。
- 规则08:Java语言中共有两种浮点型基本数据类型,分别位float和double,它们对应的封装类Float和Double都有定义NaN,POSITIVE_INFINITY、NEGATIVE_INFINITY常量,用于表示非正常运算结果。NaN(Not a Number)常量类属性代表运算结果是一个非数值,POSITIVE_INFINITY常量类属性代表正无限大,NEGATIVE_INFINITY常量类属性代表负无限大。注意,尽管两个INFINITY常量代表无限值,但其只是一个特殊数值,而不是非数值,这一点不同于NaN常量类属性。
- 考点04 字符与字符串
- 规则01:字符指在源文件种使用的单个可输出符号,而不是程序运行时的实际值。Java语言中有两种字符值,分别位基本数据类型字符和字符串。注意,字符不能作为变量,也就是说不能给字符赋值,即字符或字符串不能出现在赋值表达式的左边。
- 规则02:布尔型字符只能采用true或false两种形式。true或false带引号时不是布尔型字符,而是字符串。
- 规则03:单个字符用单引号括起来,例如'a',此种形式的字符型文字只表示由键盘输入的各类字符型值,对于无法由键盘输入的其他统一字符集中的字符,无法表示,因此Java语言定义了一种形式的字符型文字表达方式,即\u作为前缀,后跟4位十六进制的整数,例如'\u1234'。char可以与int转换:
- for (char c = '\u0000'; c <= '\uFFFF'; c++) {System.out.println(c);}
- 规则04:Java语言中共定义了8个特殊的字符。
- 字符 意义
- '\n' 代表一个新行(换行)
- '\t' 代表制表位(一个tab)
- '\f' 代表换页
- '\"' 代表双引号
- '\r' 代表回车
- '\b' 代表退格
- '\'' 代表单引号
- '\\' 代表反斜杠
- 规则05:整数型文字有3种进制表示,默认是十进制,以0作为前缀代表是八进制,以0x或者0X作为前缀代表是16进制,注意,十六进制中的字母数,既可以是大写,也可以是小写
- 规则06:整数型文字默认是数据类型是32位的整型,如果许哟啊声明64位的长整型文字,则需要加后缀l或L来表示;
- 规则07:根据规则05和规则06,同一个整数型文字在不同进制和不同类型共有18种表示形式。例如数29再个文字形式如图1-1所示。
- 进制 十进制 八进制 十六进制
- 类型 无前缀 前缀0 前缀0x 前缀0X
- 小写 大写 小写 大写
- int 无后缀 29 035 0x1d 0x1D 0X1d 0X1D
- long 后缀l 29l 035l 0x1dl 0x1Dl 0X1dl 0X1Dl
- 后缀L 29L 035L 0x1dL 0x1DL 0X1dL 0X1DL
- 规则08:浮点型文字有两种表示方式,一种是小数方式,例如:1.4444;另一种是科学计数法,例如1.4E+21。科学计数法种大写E,e均可,但是E,e前后必须有数值。
- 规则09:浮点型文字默认的数据类型是64位的双精度型。如果需要声明32位的单精度型文字,则需要加后缀f或F来表示。注意,尽管浮点型文字默认的数据类型是double,但也可以通过加后缀D,d来明确声明。
- 规则10:根据规则08和规则09,同一个浮点型文字再不同表示方式和不同类型下共有15种表示形式,例如数100.0再各种文字值形式如图1-2所示。
- 默认类型 float型 double型
- 无后缀 后缀f 后缀F 后缀d 后缀D
- 小数法 . 100.0 100.0f 100.0F 100.0d 100.0D
- 科学计数法 e 1.0e2 1.0e2f 1.0e2F 1.0e2d 1.0e2D
- E 1.0E2 1.0E2f 1.0E2F 1.0E2d 1.0E2D
- 规则11:字符串文字是指用双引号括起的一个字符序列。例如"smith"。注意含单个字符的字符串不是字符值,例如"a"不是'a'。在Java语言种,字符串是对象类型,而字符是数据类型。
- 考点05 数组
- 规则01:数组是一个具有相同元素的有序集合。数组中每个元素的类型相同,且与数组声明的类型一致。在Java语言中,数组是由基本数据类型(或其他引用类型)构成,代表一个对象。这意味着数组不是简单作为存储基本数据类型的存储器,而是一个可以具有方法和属性的对象。
- 规则02:为了使用一个数组必须采取3个步骤——声明数组、创建数组、初始化数组。
- 规则03:声明一个数组就是通知编译组的名称和数组元素的类型。注意,声明数组实际上并未给数组分配内存空间。Java语言中规定声明一个数组可以采用两种方式:datatype[] arrayName 或 datatype arrayName[] 。这两种形式在性能上面没有区别;只是方括号的位置不同。一般而言,第二种形式可读写性强,第一种方式常用于一个把数组作为返回值的方法声明中,例如 double[] MetbodName() 。
- 规则04:数组元素的类型可以分为3种,分别为基本数据类型,对象引用型和数组对象。实际上可并为2种,因为数组是一种特殊的对象,所以第二和第三种均为对象引用型。
- 规则05:构造一个数组就是根据数组的大小为数组分配存储空间。Java语言种规定,构造一个指定长度的数组语法为new datatype[size]。注意,数组长度只在构造时指定,在声明种不能指定。
- 规则06:指定一个数组的大小有两种方式,一是用一个变量,而是用一个明确的数。由于数组长度知道运行期才被使用,所以第一种方式优于第二种方式。其优点是在编写程序时,不需要知道具体大小,知道运行时根据实际需求再决定。
- 规则07:Java语言种规定,用来指定数组长度的数值类型只能时字节型、短整型或整型,而不能时长整型,更不能是浮点型。
- 规则08:声明数组和构造数组都可以再一条语句种一次性完成,语法为datatype arrayName[] = new datatype[size] 。
- 规则09:Java种的数组是一个特殊的对象,其实例和一般的对象既相识又有区别。数组对象与一般对象创建时主要存在两点区别,一是实例化一个数组对象可采用方括号,而实例化一个普通对象往往采用圆括号;二是实例化一个数组对象时,new操作符放在数组元素的类型前,而实例化一个普通对象时,new操作符放在构造器前。
- 规则10:数组对象通过new语句实例化后,尽管程序员未明确给各组元素赋值,但系统会根据元素种元素声明的数据类型自动初始化数组元素,即赋予默认值。
- 数组种不同基本数据类型元素的初始值如下:
- byte=0、short=0、int=0、long=0L、float=0.0f、double=0.0d、char='\u0000'、boolean = false、reference = null
- 数组种不同基本数据类型元素的初始值如下:
- 规则11:数组元素除了在通过new语句创建时,系统自动初始化默认值外,还可以由程序员指定初始值。语法为datatype[] arrayName = {data1,data2,...}。实际上,语句集声明、构造和初始化数组为实体,一步完成。其中,数组长度由初始化值个数决定。
- 规则12:数组的length属性用来存储数组的长度,即数组元素的个数,因此可以通过此属性获得数组长度信息。注意length是属性域,而不是方法,这不同与字符串对象的length()方法用于获取字符串种字符个数。
- 规则13:访问数组种某个元素可以通过该元素对应下标来获得,形式为arrayName[index]。在创建数组以后,其指定的大小不能再被改变,数组的下标是基于0的,所以取值范围[0~array.length-1]。访问数组元素的下标超出此范围,则会抛出数组越界异常ArrayOutOfBoundsException。
- 考点06 main()方法
- 规则01:main()方法是一个Java应用程序的入口,为了创建一个应用程序,必须再其类种定义一个mian()方法。main()方法的完整定义语法为public static void main(String[] args){主体}。
- 规则02:main()方法只作为Java应用程序的入口。当Java虚拟机调用main()方法时,应用程序被启动。Java小应用程序Applet不需要main()方法,因为小应用程序由浏览器以不同方式启动,其入口一般为init()方法。
- 规则03:main()方法的表示像是,由于数组声明根据方括号位置不同,存在两种方式,所以main()方法也也存在两种表示语法,分别为public static void main(String[] args){****}和public static void main(String args[]){****}。
- 规则04:main()方法前的修饰符public不是必须的,声明为public,是为了main()方法可以从任意一个Java运行环境种调用。但是static修饰符是必须的。这样可以在不需要构造类实例的前提下,直接执行应用程序。
- 规则05:main()方法种定义一个一维字符串数组,用来从命令行接收用户的参数。采用命令行方式执行Java应用程序的,命令行语句由4个部分构成,第一部分为命令名Java;第二部分为命令参数,为可选项;第三部分为应用程序的名称,即源文件种的公共类名;第四部分为用户参数,多个参数之前用空格隔开。从类名后的第一个字符串开始为参数,第一个参数存在第一个数组元素args[0]中,第二个参数存储在第二个数组元素args[1],以此类推。
- 规则06:main()方法中接收用户参数的数组名称Java语言中没有限定,可以部位args,但要符合标识符的规定。
- 规则07:main()方法接收用户参数的数组大小,由系统根据用户实际键入的参数自动决定。当无用户键入参数时,可以创建一个0长度的数组。为了获得传入的参数数量,可通过数组本身提供length属性来获得。
- 规则08:Java中规定main()方法没有返回值,因此main()方法中,返回值必须为void,而不能没有定义或定义为其他类型。
- 考点07 变量
- 规则01:Java中存在两种变量,即成员变量和局部变量(又名自动变量)。成员变量实在方法体外的类声明内定义的变量,即类所拥有的变量可以由系统自动初始化,赋予其一个默认值。局部变量是定义在方法体里的变量,即方法所拥有的变量,它是不能自动被系统初始化,必须由程序员为其指定初始值。如果未初始化一个局部变量就使用该变量,则会产生一个编译错误。
- 规则02:类成员变量在对象被创建后,由系统自动赋予其一个默认值,其行为如同数组初始化一样。成员变量中不同基本数据类型变量的初始值如下。
- 变量类型 初始值
- byte 0
- short 0
- int 0
- long 0
- float 0.0f
- double 0.0d
- char '\u0000'
- boolean false
- refcrence null
- 规则03:成员变量和局部变量由于其所属对象生命周期不同,因此其生存期也不同,成员变量在使用new Xxxx()创建该类的实例时被创建,而其生存期和该实例对象的生存期相同;局部变量在定义该变量的方法被调用时创建,而在该方法推出后被撤销。
- 考点08 参数传递
- 规则01:在Java中,所有的参数传递都是采用值传递方式。也就是说,当传递一个参数到方法中时,方法获得的是传入参数的副本。此规则既适用于基本型变量,也适用引用型变量。
- 规则02:如果变量的参数是引用型变量,即一个对象,则传递进方法中的变量内部存放的是该对象内存空间的引用,即内存地址。引用类型在进行参数传递时,是将引用拷贝给形式参数,因此在方法中绝不可能改变引用变量的引用,即不能使该引用变量引用其他不同的对象,但是可以改变引用变量的内容,即引用对象的属性。
- 考点09 垃圾回收器
- 规则01:在Java中,不像在C/C++语言中需要由程序员负责无用对象占据的废弃内存的回收,此项功能是由垃圾回收器自动完成的。Java的垃圾回收机制是通过一个后台系统级线程对内存分配情况进行跟踪,对程序员来说是透明的,而且它是在程序运行期间发生的。在jvm的空闲处理中,垃圾搜集线程将检查和释放不在使用的内存,即可以被释放掉的内存。垃圾收集的过程在Java程序的生存期中是自动的,不需要分配和释放内存,也避免了内存泄漏。
- 规则02:在Java中,尽管存在垃圾回收器,但依然会出现内存泄漏问题,这是因为在程序中可能存在垃圾回收器无法收集的持续存在的无用引用。当不再使用一个对象时,最好明确该对象引用为null,这种动作并不能控制垃圾回收器立刻工作,只是做到通知垃圾回收器有需要收回的对象。当然。如果系统中可用内存过低,系统也会自动运行垃圾回收器释放废弃对象占用的内存资源,供其他对象使用。
- 规则03:调用垃圾回收器有两种相同效果的方式:System.gc()和Runtime.getRuntime().gc().这两种方法的调用不会强制垃圾回收器立刻执行;只是一种建议、通知性而非强制性的要求,希望Java虚拟机调用垃圾回收器来回收已被废弃的对象,以便释放占据的资源供其它对象使用。
- 规则04:不同Java虚拟机具体实现具有不同的垃圾回收机制,即不同的垃圾回收算法。
JAVA认证考试(SCJP)笔记之第一章语言基础
最新推荐文章于 2025-04-11 00:16:46 发布