目录
1.第一个java程序
下面是第一个java程序
package org.lyt.java.foundation01.design.structure;
/**
* 第一个java程序
* @author lyt
*/
public class HelloWorld { // HelloWorld 是类名,区分大小写
public static void main(String[] args) { //main 方法是程序的入口
System.out.println("Hello World!"); //控制台打印输出“Hello World!”
} //main 方法结束
} //类结束
java中/** XXX */是多行注释,// 表示单行注释。main方法的签名一般不会改变,即固定为 public static void main(String[] args)。
在eclipse工具中新建一个java文件,拷贝粘贴,右键单击,选择Run as -> Java application,即可看到控制台输出“Hello World!”
2.java的基本数据类型
java是一种强类型语言,必须为每一个变量设置类型。java里面一共有8种基本类型,其中有4种整型,2种浮点型,1种用于表示Unicode编码的字符单元的字符类型char以及1种用于表示真值的boolean类型。
类型 | 存储要求 | 取值范围 | 包装器类型 |
---|---|---|---|
int | 4字节 | -2147483648~2147483647 | Intger |
short | 2字节 | -32768~32767 | Short |
long | 8字节 | -9223372036854775808~9223372036854775807 | Long |
byte | 1字节 | -128~127 | Byte |
float | 4字节 | 大约(正负)3.40282347E+38F(有效位数6~7位) | Float |
double | 8字节 | 大约(正负)1.79769313486231570E+308(有效位数位15位) | Double |
char | 16位 | char类型用于表示单个字符,十六进制范围是\u0000到\Uffff。如'A', '\n'等。 | Character |
boolean | - | false 和 true | Boolean |
程序中不建议使用char类型。金融数据计算中禁止使用基本数据类型,需要使用BigDecimal数据类型。
long类型的数值后缀L;float 类型后缀是F,没有后缀的浮点型数值,默认是double,double类型数值的后缀是D。
十六进制数值有前缀 0x(如:0xABCD);八进制有前缀0(如:010是8,有歧义,不建议使用);java 7.0之后,二进制前缀0b(如:0b1001是9);还可以为数字字面量加下划线,如1_000_000表示一百万。大数值以数字E+或-数字形式显示,E前的为1~10之间的数值,E后为10的多少次方,如3.4E+3F = 3400.0。
import java.math.BigDecimal;
public class PrimitiveType {
public static void main(String[] args) {
numberCaution();
sampleType();
}
/**
* 数据类型使用示例
*/
public static void sampleType() {
int a = 10;
int b = 5;
int sum = a + b;
System.out.println("sum = " + sum);
short c = 89;
short d = 7;
short sub = (short) (c - d);
System.out.println("sub = " + sub);
double e = 7.236;
double f = 5.2369;
double muti = e * f;
System.out.println("muti = " + muti);
}
/**
* 数字坑,谨慎使用
*/
public static void numberCaution() {
//float 禁止出现在四舍五入的金融计算中,需要使用 @Code BigDecimal
System.out.println(2.0 - 1.1); //0.8999999999999999
System.out.println(2.0F - 1.1F); //0.9
System.out.println(2.0D - 1.1D); //0.8999999999999999
System.out.println(2.0D - 1.1); //0.8999999999999999
System.out.println(2.0F - 1.1); //0.8999999999999999
double retD= 2.0 - 1.1;
System.out.println(retD); //0.8999999999999999
float retF = 2.0F - 1.1F;
System.out.println(retF); //0.9
//使用 @Code BigDecimal
BigDecimal retB = BigDecimal.valueOf(2.0).subtract(BigDecimal.valueOf(1.1));
System.out.println(retB); //0.9
}
}
3.变量和运算符
3.1 变量声明格式
数据类型 变量名 = value;
或者
数据类型 变量名;
变量名 = value;
变量名必须是一个字母开头由有字母和数字构成的序列。即包括‘0’-‘9’,‘A’-‘Z’,‘a'-‘z’,‘_’,‘$’或者在某种语言中代表字母或者数字的任何Unicode字符。大小写敏感。尽量不要使用$,它只适用于java编译器和其他工具生成的名字中。
3.2 常量声明格式
final 数据类型 变量名 = value;
类常量可以在前面加上 static,即:static final 数据类型 变量名 = value;
常量只能赋值一次,不能再次更改。常量名习惯上使用全大写字母,单词之间以“_”分割。const是java保留字,目前没有使用到。
3.3 运算符
- 三元操作符:?: 例如:condition:expression1?expressoin2,即如果condition为真,则是expression1,否则expression2.
- instanceOf运算符。该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。instanceof运算符使用格式如下:
( Object reference variable ) instanceof (class/interface type)
- 算术运算符
操作符 | 描述 | 例子 |
---|---|---|
+ | 加法 - 相加运算符两侧的值 | A + B 等于 30 |
- | 减法 - 左操作数减去右操作数 | A – B 等于 -10 |
* | 乘法 - 相乘操作符两侧的值 | A * B等于200 |
/ | 除法 - 左操作数除以右操作数 | B / A等于2 |
% | 取余 - 左操作数除以右操作数的余数 | B%A等于0 |
++ | 自增: 操作数的值增加1 | B++ 或 ++B 等于 21(区别详见下文) |
-- | 自减: 操作数的值减少1 | B-- 或 --B 等于 19(区别详见下文) |
4. 关系运算符与boolean运算符:>(大于)、 <(小于)、 >=(大于等于)、 <=(小于等于)、 !=(不等于)、 ==(等于)
运算符 | 描述 | 例子 |
---|---|---|
== | 检查如果两个操作数的值是否相等,如果相等则条件为真。 | (A == B)为假(非真)。 |
!= | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 | (A> B)非真。 |
< | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 | (A <B)为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 | (A> = B)为假。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 | (A <= B)为真。 |
5.位运算符:&(与)、 |(或)、 ^(异或)、 ~(非)、>>(二进制右移,符号位填充高位)、<<(二进制左移)、>>>(用0填充高位)。没有<<<符号。
操作符 | 描述 | 例子 |
---|---|---|
& | 如果相对应位都是1,则结果为1,否则为0 | (A&B),得到12,即0000 1100 |
| | 如果相对应位都是0,则结果为0,否则为1 | (A | B)得到61,即 0011 1101 |
^ | 如果相对应位值相同,则结果为0,否则为1 | (A ^ B)得到49,即 0011 0001 |
〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 | (〜A)得到-61,即1100 0011 |
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | A << 2得到240,即 1111 0000 |
>> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 | A >> 2得到15即 1111 |
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | A>>>2得到15即0000 1111 |
6.逻辑运算符:&&(与)、 ||(或)、 !(非)
操作符 | 描述 | 例子 |
---|---|---|
&& | 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 | (A && B)为假。 |
| | | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 | (A | | B)为真。 |
! | 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 | !(A && B)为真。 |
7.赋值运算符
操作符 | 描述 | 例子 |
---|---|---|
= | 简单的赋值运算符,将右操作数的值赋给左侧操作数 | C = A + B将把A + B得到的值赋给C |
+ = | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 | C + = A等价于C = C + A |
- = | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 | C - = A等价于C = C - A |
* = | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 | C * = A等价于C = C * A |
/ = | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 | C / = A等价于C = C / A |
(%)= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 | C%= A等价于C = C%A |
<< = | 左移位赋值运算符 | C << = 2等价于C = C << 2 |
>> = | 右移位赋值运算符 | C >> = 2等价于C = C >> 2 |
&= | 按位与赋值运算符 | C&= 2等价于C = C&2 |
^ = | 按位异或赋值操作符 | C ^ = 2等价于C = C ^ 2 |
| = | 按位或赋值操作符 | C | = 2等价于C = C | 2 |
8.运算符优先等级
类别 | 操作符 | 关联性 |
---|---|---|
后缀 | () [] . (点操作符) | 左到右 |
一元 | + + - !〜 | 从右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | >> = << = | 左到右 |
相等 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | | | | 左到右 |
条件 | ?: | 从右到左 |
赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
逗号 | , | 左到右 |
4 数学函数与常量
常用的数学函数有三角函数、对数函数(),常量Math.PI、Math.E、平方根(Math.sqrt())、幂(Math.pow(x,a))
Math是一个静态类,可以静态导入:import static java.lang.Math.*;后续使用就可以不带Math.。
如果得到一个可预测的结果比运行速度重要的话,那么就应该使用StrictMath类。他使用“自由发布的Math库”(fdlibm)实现算法,以确保在所有平台上得到确定结果。
System.out.println("Math.E = " + Math.E);
System.out.println("Math.PI = " + Math.PI);
System.out.println("Math.min(10, 10) = " + Math.min(16, 10));
System.out.println("Math.max(10, 10) = " + Math.max(15, 10));
System.out.println("Math.asin(10) = " + Math.asin(10));
System.out.println("Math.sin(10) = " + Math.sin(10));
System.out.println("Math.sinh(10) = " + Math.sinh(10));
System.out.println("Math.atan(10) = " + Math.atan(10));
System.out.println("Math.atan2(1,10) = " + Math.atan2(1,10));
System.out.println("Math.tan(3) = " + Math.tan(3));
System.out.println("Math.tanh(10) = " + Math.tanh(10));
System.out.println("Math.acos(10) = " + Math.acos(10));
System.out.println("Math.cos(10) = " + Math.cos(10));
System.out.println("Math.cosh(10) = " + Math.cosh(10));
System.out.println("Math.toDegrees(10) = " + Math.toDegrees(10));
System.out.println("Math.toRadians(10) = " + Math.toRadians(10));
System.out.println("Math.nextDown(10) = " + Math.nextDown(10));
System.out.println("Math.nextUp(10) = " + Math.nextUp(10));
System.out.println("Math.multiplyExact(1,103) = " + Math.multiplyExact(1,103));
System.out.println("Math.addExact(10, 10) = " + Math.addExact(10, 10));
System.out.println("Math.decrementExact(10) = " + Math.decrementExact(10));
System.out.println("Math.incrementExact(10) = " + Math.incrementExact(10));
System.out.println("Math.negateExact(2) = " + Math.negateExact(2));
System.out.println("Math.subtractExact(10, 10) = " + Math.subtractExact(10, 10));
System.out.println("Math.toIntExact(10) = " + Math.toIntExact(10));
System.out.println("Math.random() = " + Math.random());
System.out.println("Math.floor(10) = " + Math.floor(10));
System.out.println("Math.floorDiv(1,10) = " + Math.floorDiv(1,10));
System.out.println("Math.floorMod(10,101) = " + Math.floorMod(10,101));
System.out.println("Math.round(10) = " + Math.round(10));
System.out.println("Math.log(10) = " + Math.log(10));
System.out.println("Math.log10(10) = " + Math.log10(10));
System.out.println("Math.multiplyExact(1,103) = " + Math.log1p(10));
System.out.println("Math.cbrt(10) = " + Math.cbrt(10));
System.out.println("Math.ceil(10) = " + Math.ceil(10));
System.out.println("Math.copySign(10, 10) = " + Math.copySign(10, 10));
System.out.println("Math.exp(10) = " + Math.exp(10));
System.out.println("Math.expm1(10) = " + Math.expm1(10));
System.out.println("Math.getExponent(10) = " + Math.getExponent(10));
System.out.println("Math.hypot(1,10) = " + Math.hypot(1,10));
System.out.println("Math.IEEEremainder(1,10) = " + Math.IEEEremainder(1,10));
System.out.println("Math.nextAfter(10, 10) = " + Math.nextAfter(10, 10));
System.out.println("Math.pow(1,10) = " + Math.pow(1,10));
System.out.println("Math.sqrt(10) = " + Math.sqrt(10));
System.out.println("Math.rint(10) = " + Math.rint(10));
System.out.println("Math.scalb(10,10) = " + Math.scalb(10,10));
System.out.println("Math.signum(10) = " + Math.signum(10));
System.out.println("Math.ulp(10) = " + Math.ulp(10));
常用的数学函数:
序号 | 方法与描述 |
---|---|
1 | 将 Number 对象转换为xxx数据类型的值并返回。 |
2 | compareTo() 将number对象与参数比较。 |
3 | equals() 判断number对象是否与参数相等。 |
4 | valueOf() 返回一个 Number 对象指定的内置数据类型 |
5 | toString() 以字符串形式返回值。 |
6 | parseInt() 将字符串解析为int类型。 |
7 | abs() 返回参数的绝对值。 |
8 | ceil() 返回大于等于( >= )给定参数的的最小整数。 |
9 | floor() 返回小于等于(<=)给定参数的最大整数 。 |
10 | rint() 返回与参数最接近的整数。返回类型为double。 |
11 | round() 它表示四舍五入,算法为 Math.floor(x+0.5),即将原来的数字加上 0.5 后再向下取整,所以,Math.round(11.5) 的结果为12,Math.round(-11.5) 的结果为-11。 |
12 | min() 返回两个参数中的最小值。 |
13 | max() 返回两个参数中的最大值。 |
14 | exp() 返回自然数底数e的参数次方。 |
15 | log() 返回参数的自然数底数的对数值。 |
16 | pow() 返回第一个参数的第二个参数次方。 |
17 | sqrt() 求参数的算术平方根。 |
18 | sin() 求指定double类型参数的正弦值。 |
19 | cos() 求指定double类型参数的余弦值。 |
20 | tan() 求指定double类型参数的正切值。 |
21 | asin() 求指定double类型参数的反正弦值。 |
22 | acos() 求指定double类型参数的反余弦值。 |
23 | atan() 求指定double类型参数的反正切值。 |
24 | atan2() 将笛卡尔坐标转换为极坐标,并返回极坐标的角度值。 |
25 | toDegrees() 将参数转化为角度。 |
26 | toRadians() 将角度转换为弧度。 |
27 | random() 返回一个随机数。 |
Math 的 floor,round 和 ceil 方法实例比较
参数 | Math.floor | Math.round | Math.ceil |
---|---|---|---|
1.4 | 1 | 1 | 2 |
1.5 | 1 | 2 | 2 |
1.6 | 1 | 2 | 2 |
-1.4 | -2 | -1 | -1 |
-1.5 | -2 | -1 | -1 |
-1.6 | -2 | -2 | -1 |
数据类型转换必须满足如下规则:
-
1. 不能对boolean类型进行类型转换。
-
2. 不能把对象类型转换成不相关类的对象。
-
3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
-
4. 转换过程中可能导致溢出或损失精度。
-
5. 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入。
强制类型转换:
-
1. 条件是转换的数据类型必须是兼容的。
-
2. 格式:(type)value type是要强制类型转换后的数据类型。
隐含强制类型转换:
-
1. 整数的默认类型是 int。
-
2. 浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f。
5 Java语言支持一些特殊的转义字符序列。
符号 | 字符含义 |
---|---|
\n | 换行 (0x0a) |
\r | 回车 (0x0d) |
\f | 换页符(0x0c) |
\b | 退格 (0x08) |
\0 | 空字符 (0x20) |
\s | 字符串 |
\t | 制表符 |
\" | 双引号 |
\' | 单引号 |
\\ | 反斜杠 |
\ddd | 八进制字符 (ddd) |
\uxxxx | 16进制Unicode字符 (xxxx) |