类型 | 简介 |
---|---|
JavaSE 标准版 | 支持面向桌面级的应用 |
JavaEE 企业版 | 支持为企业开发的应用 |
JavaME 小型版 | 运行在移动终端的平台 |
面向对象的语言(OOP)
健壮的语言,具有强类型转换、异常处理、垃圾自动回收
跨平台的语言,一个编译好的(.class)
文件可以在多种系统上运行(运行在不同平台对应的JVM
虚拟机上)
解释型的语言,编译后的代码,需要在解释器上面进行运行(对应的编译型语言,编译后的代码,可以直接在机器上运行)
.class
文件只需要JREjava运行流程:
java类的组织形式:
Java的源文件以.java
为扩展名。源文件的基本组成是class
类
一个源文件最多只能一个public
类,其他类的个数不限。文件名必须按该public
类名进行命名。
Java严格区分大小写
Java程序的入口是main方法,(可以写在非public
类中)有固定书写格式:
public static void main(String[] args){...}
变量 = 变量名 + 值 + 数据类型
int
占四个字节short
占两个字节long
占八个字节byte
占一个字节float
占四个字节double
占八个字节char
两个字节boolean
一个字节java的类型转换有两种:一种是自动类型的转换,一种是强制类型的转换。
规则: 数据类型按精度大小进行自动转换
注意细节:
byte
、short
)和char
不会自动转换属于自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型,同时需要加上强制转换符()
,可能会造成精度降低或者溢出的情况。
注意细节:
强制转换符只针对最近的操作数有效。
int x = (int)10*3.5 + 6*1.5; //报错
int y = (int)(10*3.2 + 6*3.5); //正常运行
char
类型可以保存int
类型的常量值,但是不会保存int
的变量值
char c1 = 10000; //正常运行
int m = 100;
char c2 = m; //报错
char c3 = (char)m; //正常运行
byte
和short
,char
类型在进行运算时,当做int
进行处理
基本数据类型和String类型的转换
基本类型转String
int n1 = 100;
float n2 = 1.1f;
double n3 = 1.2;
boolean b1 = true;
String s1 = n1 + ""; //直接加双引号便可以实现类型的转换
String s2 = n2 + "";
String s3 = n3 + "";
String s4 = b1 + "";
System.out.println("str1:"+s1+" str2:"+s2+" str3:"+s3+" str4:"+s4);
String类型转基本类型(调用基本类型的包装类,调用parseXXX
方法
Integer.parseInt("123"); //调用parseXXX方法
Double.parseDouble("123.4");
Float.parseFloat("123.45");
Short.parseShort("12");
Long.parseLong("123");
Boolean.parseBoolean("true");
Byte.parseByte("12");
平时最常用的运算符
运算符 | 运算 |
---|---|
+ | 正号、加号 |
- | 负号、减号 |
* | 乘号 |
/ | 除号 |
% | 取模(取余) |
++ | 自增,根据前后顺序分为,先运算后取值,和先取值后运算 |
– | 自减,根据前后顺序分为,先运算后取值,和先取值后运算 |
将某个运算后的值,赋给指定的变量。
运算符 | 运算 | a 与b进行运算 |
---|---|---|
= | 等于号 | a = b, 为b赋值给a |
+= | 加于等于 | a += b,为 a = a + b |
-= | 减于等于 | a -= b,为 a = a - b |
*= | 乘以等于 | a *= b,为 a = a * b |
/= | 除以等于 | a /= b,为 a = a / b |
%= | 取余等于 | a %= b,为 a = a % b |
关系运算符的结果都是boolean
型的,经常用在if
或者循环结构中
运算符 | 运算 |
---|---|
== | 相等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
连接多个条件(多个关系表达式),最终的结果是boolean
类型
&&
, 短路或 ||
, 取反 !
&
, 逻辑或 |
,逻辑异或 ^
a | b | a&b | a&&b | a|b | a||b | !a | a^b |
---|---|---|---|---|---|---|---|
true | true | true | true | true | true | false | false |
true | false | false | false | true | true | false | true |
false | true | false | false | true | true | true | true |
false | false | false | false | false | false | true | false |
位运算符用于直接操作二进制位的运算,可以用来进行高效的位操作。在很多情况下,采用位运算的方法来进行计算可以提高运算效率
运算符 | 描述 | 示例 |
---|---|---|
& | 按位与,对应位都为1时结果为1,否则为0 | 5 & 3 = 1 |
| | 按位或,对应位有一个为1时结果为1,两个都为0时结果为0 | `5 |
^ | 按位异或,对应位不同时结果为1,相同时结果为0 | 5 ^ 3 = 6 |
~ | 取反,对二进制数的每一位取反 | ~5 = -6 |
<< | 左移,将一个数的二进制位向左移动指定的位数 | 5 << 1 = 10 |
>> | 右移,将一个数的二进制位向右移动指定的位数 | 5 >> 1 = 2 |
>>> | 无符号右移,运算规则:低位溢出,高位补零 | 5 >>> 2 = 1 |
基本语法为: 条件表达式 ? 表达式1 : 表达式2;
运算规则:
true
,运算后的结果是表达式1false
,运算后的结果为表达式2int a = 1, b = 2;
//三元运算符
int ans = a > b ? a++ : b++;
//等价表达
if(a > b) ans = a++;
else ans = b++;
优先级如下,最上面的优先级最高
运算符 | 描述 |
---|---|
(),{} | 括号 |
单目运算符(++、--、~、! ) | 单目运算符 |
算术运算符(*,/, %, +, - ) | 乘、除、取模、加、减等 |
移位运算符 (<<, >> ) | 左移、右移等 |
比较运算符 (>, <, >=, <= ) | 相等、不等、大于、小于、大于等于、小于等于 |
& | 按位与 |
^ | 按位异或 |
` | ` |
&& | 逻辑与 |
` | |
? : | 条件运算符 |
赋值运算符 (=, *=, /=, +=, -= ) | 赋值、加等于、减等于、乘等于等 |
标识符(变量)命名规则:
0-9
,_或$
组成示例:
int 12ab = 10; //报错,开头不能是数字
int a b = 10; //报错,中间不能加入空格
int a# = 10; //报错,特殊字符只能是_或者$
int goto = 10; //报错,不能是保留字或者是关键字
标识符命名规范:
aaa.bbb.ccc
TankShotGame
tankShotGame
TAX_RATE
50个关键字如下表:
基本类型关键字 | 流程控制关键字 | 类、方法和变量相关关键字 | 访问控制关键字 | 异常处理关键字 | 其他关键字 |
---|---|---|---|---|---|
boolean | if | class | public | try | static |
byte | else | interface | private | catch | final |
char | switch | extends | protected | finally | synchronized |
double | case | implements | throw | transient | |
float | while | new | throws | volatile | |
int | do | return | this | ||
long | for | void | super | ||
short | break | package | |||
continue | import | ||||
default |
? 举例:
//基础数据类型赋值,是值传递
int a = 10;
int b = a; //a的值10,直接复制一份给b
b = 80;
System.out.println("a:"+a+ " b:" + b);
//数组的赋值,是引用传递,传递的是地址
int arr1[] = {1,2,3}; //假设arr1指向的地址为0x0011
int arr2[] = arr1; //那么arr2指向的地址也是0x0011,这个地址指向的内容是一样的
arr2[0] = 10; //arr2[0]修改的是0x0011地址指向的内容,所以arr1[0] = arr2[0] = 10;
System.out.println("arr1[0]:"+arr1[0]+ " arr2[0]:" + arr2[0]);
主要是申请,二维数组可以通过静态申请和动态申请两种方式进行。
//静态申请,直接申请一个静态的二维固定长度数组
int arr1[][] = new int[2][3];
int arr2[][] = {{1,2,3},{4,5,6},{7,8,9}};
//动态申请,第一维长度先固定,后面根据需要设定第二维度的长度
int arr3[][] = new int[3][];
for(int i = 0; i < arr3.length; i++){
arr3[i] = new int[arr3.length];
}