Java关键字
abstract | boolean | break | byte | case |
catch | char | class | const | continue |
default | do | double | else | extends |
assert | final | finally | float | for |
goto | if | implements | import | instanceof |
int | interface | long | native | new |
strictfp | package | private | protected | public |
return | short | static | super | switch |
synchronized | this | throw | throws | transient |
try | void | volatile | while | enum |
Java保留字
为Java预留的关键字,现在还没有用到,但在升级版本中可能作为关键字被使用。
byValue、cast、false、future、generic、inner、operator、outer、rest、true、var、goto(跳转到....)、const(常量)、null
Java关键字与保留字区别
参考:https://www.cnblogs.com/nancyzhang/p/8147526.html
Java关键字(KeyWord): 对Java的编译器有特殊的意义,他们用来表示一种数据类型或者表示程序的结构。
Java保留字(Reserved Word):为Java预留的关键字,现在还没有用到,但在升级版本中可能作为关键字被使用。
Java关键词(50个)
JAVA保留字
注意:
1. goto 和 const 这两个关键字是c++保留的关键字,目前在java中不能使用。(使用时会报错)
2. 所有的关键字都是小写,如果关键字中任何一个字母大写则不再是关键字。(Java中区分大小写)
3. then、sizeof、String、NULL、friendly 等都不是关键字,虽然看起来很像(可能因为大小写的关系或者可能是其它语言的关键字但不是Java的)
补充:
assert关键字有两种用法(在使用JUnit或TestNG进行自动化测试的时候会经常用到):
1、assert <boolean表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出AssertionError,并终止执行。
2、assert <boolean表达式> : <错误信息表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出java.lang.AssertionError,并输入<错误信息表达式>。
Java标识符
java语言中,对于变量,常量,函数,语句块也有名字,我们统统称之为Java标识符.
标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的。
1、已经被赋予特殊含义的系统定义的一些标识符(关键字)
2、未被定义的,用户自己定义一些具有特殊含义的单词
在Java中,我们需要标识代码中的很多元素,包括类名、方法、字段、变量、包名等。我们选择的名称就称为标识符,并且必须遵循如下规则:
- 标识符不能是关键字或true、false、null。
- 标识符可以包含字母、数字0-9、下划线(_)或美元符号($)。
- 标识符的第一个字符必须是一个字母、下划线(_)或美元符号($)。
- 标识符是区别大小写的,并且没有规定最大长度。
- 必须见名知意
Java基础数据类型
Java语言本身内置了八种数据类型。这八种数据类型称为基本类型,是创建类的基本构造单元。表1列出了这八种数据类型占用的内存空间大小以及取值范围。
表1 Java的基本类型 | |||
数据类型 | 关键字 | 大小 | 取值范围 |
字节型 | byte | 1个字节(8位) | -27~27-1 (-128~127) |
短整型 | short | 2个字节(16位) | -215~215-1(-327698~32767) |
整型 | int | 4个字节(32位) | -231~231-1 |
长整型 | long | 8个字节(64位) | -263~263-1 |
单精度型 | float | 4个字节(32位) | ±1.40239846E-45~±3.40282347E+8 |
双精度型 | double | 8个字节(64位) | ±4.94065645841246544E-324~±79769313486231570E+308 |
字符型 | char | 2个字节(16位) | \u0000~\uFFFF |
布尔型 | boolean | 不确定,由JVM决定 | true、false |
必须注意的是,与C语言不同的是,Java各数据类型(除布尔型以外)占用的内存空间是严格定义的。例如,整型是有符号的32位数据类型。因为Java程序是运行在JVM上,所以Java可以定义其基础数据类型的精确大小,以独立于程序所运行的平台。这样,下层的操作系统平台就不会影响到Java基础数据类型的大小和取值范围,从而保证了Java程序的可移植性。
基本数据转换
实数常量(如:2.3)默认为double类型,如果需要定义为float类型,需要在数字后方添加f或者F。
整数常量(如:123)默认为int类型,如果需要定义为long类型,需要在数字后加l或者L
Java数据类型提升规则
在Java中执行数学表达式运算时,有如下自动类型提升规则:
- 所有的byte型、short型和char型将被提升到int型;
- 如果其中有一个操作数是long型,那么计算结果就是long型;
- 如果其中有一个操作数是float型,那么计算结果就是float型;
- 如果其中有一个操作数是double型,那么计算结果就是double型。
Java中数据强制转换
数据强制转换后可能存在数据丢失,例如:int nuber = (int)(1+1.2)
>>输出number值为2,为int类型,小数部分就会丢失,只保留整数
>>大的数据类型转换为小的数据类型:强制转换
>>规则:小类型名 变量名 =(小类型名)(大数据变量)
注意:
加上强制转换符,可能会造成丢失精度或者溢出,使用时需要多加留心。
boolean 类型不能转换为其他数据类型
Java引用类型
当我们声明一个类类型的变量时,该变量就称为引用。我们用术语“引用”,是因为一个引用要指向一个对象。
引用类型与基本类型不同之处在于:引用不包含它所指向的对象的实际数据,而是指向内存中对象所在的位置。
主要分为三类:类class 、接口interface 、数组array
Java常量
Java使用关键字final,来表示某变量实际上是常量,以保证其值不会改变。
习惯上,程序员通常将常量名的所有字母大写,这样在源代码中一眼就能瞥见它们。
声明变量和定义变量
- Java程序中每一个变量都属于特定的数据类型,在使用之前都必须要对其进行声明
- 变量声明格式的语法:数据类型 变量;
- 声明变量之后,需要对变量进行初始化(养成习惯)
- 变量初始化的语法:数据类型 变量名 = 初始值;
例如:
int i = 0;
变量作用域
局部变量:
- 只在特定的过程或函数中可以访问的变量,被称为局部变量。
- 与局部变量相对应的,是全局变量。
- 全局变量就是从定义的位置起,作用域覆盖整个程序范围的变量。
- 局部变量可以和全局变量重名,但是局部变量会屏蔽全局变量。在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
- 一旦退出方法,构造函数或块中的变量将被销毁。
- 访问修饰符不能用于局部变量。
- 局部变量在堆栈级别内部实现。
- 局部变量要先赋值,再进行运算,而实例变量均已经赋初值。(这是局部变量和实例变量的一大区别)
全局变量(成员变量):
其中实例变量、类变量、常量都是属于成员变量的,成员变量又被称为全局变量
java类的成员变量有俩种:一种是被static关键字修饰的变量,叫类变量或者静态变量;另一种没有static修饰,为实例变量。
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:
(1)实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。
(2)静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。
(3)总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
静态变量均有默认值,数字默认为0,布尔值默认为false,对象默认为null。
注:
局部变量
定义:在方法内定义的变量称为“局部变量”或“临时变量”,方法结束后局部变量占用的内存将被释放。
全局变量
定义:全局变量,又称“外部变量”,它不是属于哪个方法,作用域从定义的地址开始到源文件结束。
注意事项:
当局部变量与全局变量重名时,起作用的是局部变量。
成员变量
定义:在类体的变量部分中定义的变量,也称为字段。
区别:
java中没有全局变量的定义,这是C中的(我们通常称为成员变量或属性)
例:
class Demo{
int x;// 非静态成员变量,又称为属性,对该类不同的对象来说,属性是不同的
static int y;// 静态成员变量,一个类中只有一个该变量,该类不同的对象共享同一个静态成员变量
public static void main(String[] args){
int m = 0;// 局部变量,是方法内部定义的变量,只在方法内部可见,在该方法结束后,由垃圾回收器自动回收
}
}
java运算符
表2列出了Java中的不同运算符。表中的运算符是按照它们在计算时的优先级别排序的,其中,增量/减量运算符的优先级最高。
表2 Java中的运算符和优先级 | |
运算符分类 | 运算符 |
前置或后置增量/减量 | ++、- - |
一元运算符 | +、-、~、!、(强制转换) |
乘法/除法/取模 | *、 /、% |
加/减/字符串连接 | +、 -、 + |
移位运算符 | <<、 >>、 >>> |
比较运算符 | <、<=、 >、>=、instanceof |
相等运算符 | = =、 != |
按位运算符 | &、|、 ^ |
条件 AND, OR | &&、|| |
三目运算符 | ? : |
赋值运算符 | = |
扩展赋值运算符 | *=、/=、%=、+=、–=、<<=、>>=、>>>=、&=、^=、|= |
移位运算符总结
快速运算结果特点:
<<:一个十进制数a左移n位,就用该数a乘以2的n次方得到最终结果
>>:一个十进制数a右移n位,就用该数a乘以2的负n次方得到最终结果
例:10<<1 得到结果为20 计算方式:10*2^1
10>1 得到结果为5 计算方式:10*2^(-1)
Java中instanceof关键字
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法:
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
但是instanceof在Java的编译状态和运行状态是有区别的:
在编译状态中,class可以是object对象的父类,自身类,子类。在这三种情况下Java编译时不会报错。
在运行转态中,class可以是object对象的父类,自身类,不能是子类。在前两种情况下result的结果为true,最后一种为false。但是class为子类时编译不会报错。运行结果为false。
JAVA运行期数据存放
一个正在运行的Java程序在内存中以进程的形式存在,Java虚拟机为该进程分配内存空间。而一个进程可以有一到多个线程,多个线程共享该进程的内存空间。每个线程是一个单独的执行单元。Java程序运行时,某些数据区是由程序中所有线程共享的,还有一些则只能由一个线程所拥有。
每个Java虚拟机都有一个方法区和一个Java堆(Heap),它们是由该Java虚拟机中所有线程共享的。类文件的字节码以及常量池(常量和字面量)放在方法区,而程序运行时所创建的所有对象都放在堆中。
当一个新线程被创建时,该线程就会被分配一个属于它自己的Java栈和PC寄存器。如果线程正在执行的是一个Java方法,那么PC寄存器的值总是指示下一条将被执行的指令。而它的Java栈则总是存储该线程中Java方法调用的状态,包括方法中的局部变量、被调用时传递进来的参数、返回值以及运算中间结果等。
对于基本类型的变量,Java虚拟机将其放在Java栈中。
对于引用类型的变量,引用变量本身放在Java栈中,而引用所指向的对象放在Java堆中。
Java注释
在Java中给代码添加注释的方法有三种技术,分别是:
- Ø单行注释:用两个正斜线“//”注释掉斜线后的同行文本。
- Ø多行注释:“/*”和“*/”符号用于多行代码的注释。用“/*”打开注释,“*/”关闭注释。所有在二者之间的文本都会被注释掉。
- ØJavaDoc注释(文档注释):“/**”和“*/” 是一对特殊类型的注释符号,用于与javadoc工具一起生成包含注释的HTML文件。这些生成的HTML页面与Java代码一起提供给程序员,以帮助程序员理解代码的用途、用法。在Java中,这项功能被广泛使用。