java背记知识点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 注释
类型:1) 单行注释:
//text——从"//"到本行结束的所有字符均作为注释而被编译器忽略
2) 多行注释:
/*text*/——从"/*"到"*/"间的所有字符会被编译器忽略
3) 文档注释:
/** text */——从"/**"到"*/"间的所有字符会被编译器忽略。当这类注释出现在任何声明(如
类的声明、类的成员变量的声明或者类的成员方法的声明)之前时,会作为JavaDoc文档的内容
2. 标识符
类、方法和变量的名字
1) java标识符以字母、_和$开头,不能以数字开头,后跟字母、数字、“_”和“$”的组合;
2) 大小写敏感
3) 没有长度限制。
举例: 合法标识符 非法标识符
try try#
GROUP_7 7GROUP
openDoor open-door
boolean1 boolean
Java中的名称命名规范:
包名:多单词组成时所有字母都小写:xxxyyyzzz
类名接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
3. 关键字
Java语言的关键字是程序代码中的特殊字符。包括:
. 类和接口的声明——class, extends, implements, interface
. 包引入和包声明——import, package
. 数据类型——boolean, byte, char, double, float, int, long, short
. 某些数据类型的可选值——false, true, null
. 流程控制——break, case, continue, default, do, else, for, if, return, switch, while
. 异常处理——catch, finally, throw, throws, try
. 修饰符——abstract, final, native, private, protected, public, static, synchronized, transient, volatile
. 操作符——instanceof
. 创建对象——new
. 引用——this, super
. 方法返回类型——void
Java语言的保留字是指预留的关键字,它们虽然现在没有作为关键字,但在以后的升级版本中有可能作为关键字。
. 所有关键字都是小写;
. friendly, sizeof不是Java语言的关键字,这有别于C++;
. 程序中标识符不能以关键字命名;
4.基本类型:
Java语言把数据类型分为基本类型和引用类型。
------------------------------------------------------------
基本类
型 数值类型 浮点数类型 float
double
整数类型 byte
short
int
long
字符类型 char
boolean
------------------------------------------------------------
引用类型 引用 类类型(String在其中)
接口类型
数组类型
------------------------------------------------------------
接下来,我们主要关注基本数据类型,关注各种基本数据类型 有什么样的取值范围?占用多少内存空间?
类 型 占用存储空间 表数范围
byte 1字节 -128 ~ 127
short 2字节 -215 ~215-1
int 4字节 -231 ~ 231-1
long 8字节 -263 ~ 263-1
单精度float 4字节 -3.403E38 ~ 3.403E38
双精度double 8字节 -1.798E308 ~ 1.798E308
char 2字节
boolean 1字节
5.boolean类型
位置 boolean类型变量取值
------------------------------------------------------------
Java源程序 只能是true或false
class文件 用int或byte表示boolean
虚拟机中 用整数0来表示false, 有任意一个非零整数表示true
强调,在Java源程序中不允许把整数或null赋给boolean类型的变量,这是有别于其它语言(如c语言)的地方. 例:
boolean isMarried = 0; //编译出错,提示类型不匹配
boolean isMarried = null; //编译出错,提示类型不匹配
6.文本数据类型——char和String
char的几种可能取值
Java语言采用UCS-2字符编码,字符占2个字节。
字符a的二进制数据形式为 0000 0000 0110 0001
十六进制数据形式为 0x0061
十进制数据形式为 97
以下4种赋值方式是等价的:
char c = 'a';
char c = '\u0061'; //设定"a"的十六进制数据的Unicode字符编码
char c = 0x0061; //设定"a"的十六进制数据的Unicode字符编码
char c = 97; //设定"a"的十进制数据的Unicode字符编码
char 型数据用来表示通常意义上"字符"。
字符型常量的三种表现形式:
字符常量是用单引号(‘ ’)括起来的单个字符,涵盖世界上所有书面语的字符。例如:char c1 = 'a'; char c2 = '中'; char c3 = '9';
Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如:char c3 = '\n'; -- '\n'表示换行符
直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。如:\u000a 表示 \n。
char 类型是可以进行运算的。因为它都对应有 Unicode 值。
自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(()),但可能造成精度降低或溢出,格外要注意。
通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。如: String a = “43”; int i = Integer.parseInt(a);
boolean类型不可以转换为其它的数据类型。
转义字符
Java编程人员在给字符变量赋值时,通常直接从键盘输入特定的字符,而不会使用Unicode字符编码,因为很难记住各
种字符的Unicode字符编码值。
对于有些特殊字符,比如单引号,如不知道它的Unicode字符编码,直接从键盘输入编译错误:
char c = '''; //编码出错
为了解决这个问题,可采用转义字符来表示单引号和其他特殊字符:
char c = '\'';
char c = '\\';
转义字符以反斜杠开头,常用转义字符:
\n 换行符,将光标定位到下一行的开头;
\t 垂直制表符,将光标移到下一个制表符的位置;
\r 回车,将光标定位到当前行的开头,不会移到下一行;
\\ 反斜杠字符
\' 单引号字符
7.整数类型
byte, short, int和long都是整数类型,并且都是有符号整数。与有符号整数对应的是无符号整数,两者的区别在于
把二进制数转换为十进制整数的方式不一样。
. 有符号整数把二进制数的首位作为符号数,当首位是0时,对应十进制的正整数,当首位是1时,对应十进制的负整
数。对于一个字节的二进制数, 它对应的十进制数的取值范围是-128 - 127。
. 无符号整数把二进制数的所有位转换为正整数。对于一个字节的二进制数, 它对应的十进制数的取值范围是0 - 255。
在Java语言中,为了区分不同进制的数据,八进制数以“0”开头,十六制以“0x”开头。举例:
一个字节的二进制数 八进制数 十六进制数 有符号十进制数 无符号十进制数
-------------------------------------------------------------------------------------------------
0000 0000 0000 0x00 0 0
1111 1111 0377 0xFF -1 255
0111 1111 0177 0x7F 127 127
1000 0000 0200 0x80 -128 128
如果一个整数值在某种整数类型的取值范围内,就可以把它直接赋给这种类型的变量,否则必须进行强制类型的转换。
byte = 13;
如129不在byte类型的取值范围(-128-127)范围内,则必须进行强制类型的转换。
byte b = (byte)129; //变量b的取值为-127.
如果一个整数后面加上后缀——大写"L"或小写"l", 就表示它是一个long类型整数。以下两种赋值是等价的:
long var = 100L; //整数100后面加上大写的后缀"L",表示long型整数;
long var = 100l; //整数100后面加上大写的后缀"l",表示long型整数;
Java语言允许把八进制数(以"0"开头), 十六进制数(以"0x"开头)和十进制数赋给整数类型变量,例如:
int a1 = 012; //012为八进制数,变量a1的十进制取值为10
int a2 = 0x12; //0x12为十六进制数,变量a2的十进制取值为18
int a3 = 12; //12为十进制数,变量a3的十进制取值为12
int a4 = 0xF1; //0xF1为十六制数,变量a4的十进制取值为241
byte b = (byte)0xF1 //0xF1为十六制数,变量b的十进制取值为-15
自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
byte-->short-->int-->long-->float-->double
char----->int-->long-->float-->double
有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。
自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(()),但可能造成精度降低或溢出,格外要注意
。
通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。如: String a = “43”; int i = Integer.parseInt(a);
boolean类型不可以转换为其它的数据类型。
8. 浮点类型
浮点类型表示有小数部分的数字。Java中有两种浮点类型:
. float: 占4个字节,共32位,称为单精度浮点数;
. double: 占8个字节,共64位,称为双精度浮点数;
float和double类型都遵循IEEE754标准,该标准分别为32位和64位浮点数规定了二进制数据表示形式。
float=1(数字符号)+8(指数,底数为2)+23(尾数)
double=1(数字符号)+11(指数,底数为2)+52(尾数)
在默认情况下,小数及采用十进制科学计数法表示的数字都是double类型,可以把它直接赋值给double类型变量。
double d1 = 1000.1;
double d2 = 1.0001E+3; //采用十进制科学计数法表示的数字,d2实际取值为1000.1
double d3 = 0.0011;
double d4 = 0.11E-2; //采用十进制科学计数法表示的数字,d4实际取值为0.0011
如果把double类型的数据直接赋给float类型变量,有可能会造成精度的丢失,因此必须进行强制类型的转换,否
则会导致编译错误,例如:
float f1 = 1.0 //编译错误,必须进行强制类型转换;
float f2 = 1; //合法,把整数1赋值给f2,f2的取值1.0;
float f3 = (float)1.0; //合法,f3的取值为1.0;
float f4 = (float)1.5E+55; //合法, 1.5E+55超出了float类型的取值范围,
f4的取值为正无穷大
System.out.println(f3); //打印1.0;
System.out.println(f4); //打印Infinity
----------------------------------------------------------------------------------------------------
Float.NaN 非数字
Float.POSITIVE_INFINITY 无穷大
Float.NEGATIVE_INFINITY 负无穷大
float f1 = (float)(0.0/0.0); //f1的取值为Float.NaN
float f2 = (float)(1.0/0.0); //f2的取值为Float.POSITIVE_INFINITY
float f3 = (float)(-1.0/0.0); //f3的取值为Float.NEGATIVE_INFINITY
System.out.println(f1); //打印NaN;
System.out.println(f2); //打印Infinity
System.out.println(f
3); //打印-Infinity
Java语言之所以提供以上特殊数字, 是为了提高Java程序的健壮性,并且简化编程。当数字运算出错时,可以用浮
点数取值范围内的特殊数字来表示所产生的结果。否则,如果Java程序在进行数学运算遇到错误时就抛出异常,会影
响程序的健壮性,而且程序中必须提供捕获数学运算异常的代码块,增加了编程工作量。
9. 创建类
类是一组具有相同属性和行为对象的模板。面向对象编程的主要任务就是定义对象模型中的各个类。
package sample;
public class Teacher {
/**attributes of a teacher*/
private String name;
private int age;
private double salary;
/** Creates a new instance of Teacher */
public Teacher(String name, int age, double salary) {
this.salary = salary;
this.age = age;
= name;
}
/**operations on properties */
/** get the name of this teacher */
public String getName() { return name; }
/**get the salary of this teacher */
public double getSalary() { return salary; }
/**get the age of teacher teacher */
public int getAge() { return age; }
……
}
代码解析:
1) package sample;
包声明语句,将Java类放到特定的包中,便于类的组织、权限访问和区分名字相同的类。
2) public class Teacher {...}
类的声明语句,类名为Teacher, public修饰符意味着这个类可以被公开访问;
声明类的格式:
class 类名 {
类内容
}
3) private String name;
类的属性(也称为成员变量)的声明语句;Teacher类有一个name属性,字符串类型,private修饰符意味着这个属性
不能被公开访问。
4) public String getName() { return name; }
方法的声明语句和方法体
方法名为getName,不带参数,String表明返回类型为String。public表明这个方法可以被公开访问。getName后紧跟
的大括号为方法体,代表getName的具体实现。
声明方法的格式:
返回值类型 方法名 (参数列表) {
方法体
}
返回值类型是方法的返回数据的类型, 如果返回值类型为void, 表示没有返回值。
方法名是任意合法的标识符;
参数列表可包含零个或多个参数,参数之间以逗号","分开。
方法体每个语句用";"结束;
方法体中使用return语句返回数据或结束本方法的执行;
注:不介绍构造方法。在面向对象章节会提到。
10. 创建实例
public static void main(String[] args) {
Teacher gzhu = new Teacher("George Zhu", 30, 10000);
System.out.println("Teacher: " + gzhu.getName());
System.out.println("\tAge: " + gzhu.getAge());
System.out.println("\tSalary: " + gzhu.getSalary());
}
main()方法是Java应用程序的入口点,每个Java应用程序都是从main()方法开始运行的。作为程序入口的main()方法必
须同时符合以下几个条件:
. 用public static修饰;
. 返回类型为void;
. 方法名为main;
. 参数类型为String[];
包含main方法的类又叫主程序类。
类创建好之后,通过new关键字创建具体对象。它有以下作用:
. 为对象分配内存空间,将对象的实例变量自动初始化为其变量类型的默认值;
. 如实例变量显示初始化,将初始化值赋给实例变量;
. 调用构造方法;
. 返回对象的引用;
注:结合实例,并画内存分配图讲解。
11. 基本类型和引用类型的区别
1) 基本类型代表简单的数据类型,比如整数和字符。
引用类型代表复杂数据类型,引用类型所引用的实例包括操纵这种数据类型的行为。
通过"."运算符,就能访问引用变量所引用的实例的方法.
2) 基本类型Java虚拟机会为其分配数据类型实际占用的内存空间;
引用类型仅是一个指向堆区中某个实例的指针。
例:public class Counter {
int count = 13;
}
Counter counter = new Counter();
counter引用变量-------------> Counter实例
count变量(占4个字节,值为13)
counter引用变量的
取值为Counter实例的内存地址。
counter引用变量本身也占一定的内存空间,到底占用多少内存空间取决于Java虚拟机的实现,这对
Java程序是透明的。
注:counter引用变量到底位于Java虚拟机的运行时数据区的哪个区?取决于counter变量的作用域,如果
是局部变量,则位于Java栈区;
静态成员变量,则位于方法区;
实例成员变量,则位于堆区;