Java编程基础
Java关键字
break | ||||
case | const | |||
continue | ||||
float | ||||
goto | ||||
long | native | |||
new | ||||
try |
assert,用来进行程序调试,断言条件是否满足
const,保留
goto,保留
native,方法用非Java代码实现
strictfp,浮点数比较使用严格的规则
synchronized,同一时间只有一个线程访问
transient,不序列化字段
volatile,标记字段可能被多个线程访问而不做同步,当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。
true、false、null不是关键字,是显式常量
一些概念
Java SE(面向对象、API、JVM…)
Java EE(JSP、EJB、服务器…)
Java ME(移动设备、游戏、通信…)
JVM(Java Virtual Machine)Java虚拟机,实现跨平台
JDK(Java Development kit)Java开发工具包
JRE(Java Runtime Environment)Java运行时环境
配置环境变量:
jdk/binjavac.exe java.exe
jdk/lib类库文件.jar
JAVA_HOME配置JDK安装路径
PATH 配置JDK命令文件位置(bin)
CLASSPATH 配置类库文件位置(lib)
修饰符
访问控制修饰符
修饰符 | 本类 | 同包 | 子类 | 其他包 |
private | Y |
|
|
|
default | Y | Y |
|
|
protected | Y | Y | Y |
|
public | Y | Y | Y | Y |
非访问修饰符
static,修饰静态类方法和类变量
final,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
abstract,用来创建抽象类和抽象方法。
synchronized 和 volatile,主要用于线程的编程。
transient,序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。
数据类型
byte | 1字节 | float | 4字节 |
short | 2 | double | 8 |
int | 4 | char | 2 |
long | 8 | boolean |
|
整数类型:有符号的以二进制补码表示的整数
浮点数:符合IEEE 754标准的浮点数
char:16 位 Unicode 字符
低 ------------------------------------> 高
byte short char—> int —> long—>float —> double
所有数值类型都有正负号,Java没有无符号的数值类型。
基本类型的包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。
BigInteger支持任何精度的整数,BigDecimal支持任何精度的定点数。
转义字符
\n 换行 (0x0a)
\r 回车 (0x0d)
\f 换页符(0x0c)
\b 退格 (0x08)
\0 空格 (0x20)
\s 字符串
\t 制表符
\" 双引号
\' 单引号
\\ 反斜杠
\ddd 八进制字符 (ddd)
\uxxxx 16进制Unicode字符 (xxxx)
操作符
算术:+,-,*,/,%,++,--
赋值:=,+=,-=,*=,/=,%=
比较:>,<,>=,<=,==,!=,(对象内容比较重写equals()方法,equals默认比较引用,必要时需要覆盖equals方法)
逻辑:&&,||,!,^
条件运算符:(?:)
位运算符:>>,<<,>>>(无符号右移),&(按位与),|(按位或),^(按位异或),~(按位非)。
>>32相当于>>0,移位操作右边的参数要先进行模32(int)/64(long)运算。
&|^两边都是布尔类型则为布尔逻辑运算符(非短路运算)
其他运算符:[],.,(),new,instanceof(A instanceof B //A是否为B的实例)
直接常量:L或l代表long,F或f代表float,D或d代表double,
0X或0x十六进制,前缀0八进制,1.23e-39科学计数法
控制流程
if…,if…else…,if…else if…
switch后小括号值必须整型或字符型(SE7后支持字符串)
while,do-while,for break,continue,return
for(类型 x: f){}//类似foreach,可用于任何Iterable对象
输入、输出
import java.util.Scanner;
Scanner input = new Scanner(System.in);
int score = input.nextInt();
String str = input.nextLine();
System.out.println();//print()不换行
System类中封装了许多关于系统的信息。
数组
声明:int[]s;s=new int[5]或int[] s = newint[5];
String str[][] = new String[3][4];
String s[][] = new String[2][];
s[0] = new String[2];
s[1] = new String[3];
二维数组定义可以只给出行,然后为每一行分别指定列数,列数可以不同为不规则二维数组。
s.length数组长度,可以用foreach循环for(int score: s){…}
常用类
Arrays类
Arrays操作Java中数组,方法都是静态的
import java.util.Arrays;
一些常用方法:
publicstatic void sort(Object[] a)
对指定对象数组根据其元素的自然顺序进行升序排列。
publicstatic void fill(int[] a, int val)
将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。
publicstatic boolean equals(long[] a, long[] a2)
如果两个指定的 long 型数组彼此相等,则返回 true。
publicstatic int binarySearch(Object[] a, Object key)
用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。
Number类
Java 语言为每一个内置数据类型提供了对应的包装类。
所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。char类型包装类为Character 类
Interger.parseInt(str);//将String转为int,或valueOf()
str=””+int;//将int转为String,或toString()
xxxValue()//将 Number 对象转换为xxx数据类型的值并返回。
Math 类
Math 包含了用于执行基本数学运算的属性和方法,Math 的方法都被定义为 static形式,通过 Math 类可以在主函数中直接调用。
abs()返回参数的绝对值。
ceil()对整形变量向左取整,返回类型为double型。
floor()对整型变量向右取整。返回类型为double类型。
rint()返回与参数最接近的整数。返回类型为double。
round()返回一个最接近的int、long型值。
min()返回两个参数中的最小值。
max()返回两个参数中的最大值。
exp()返回自然数底数e的参数次方。
log()返回参数的自然数底数的对数值。
pow()返回第一个参数的第二个参数次方。
sqrt()求参数的算术平方根。
sin()求指定double类型参数的正弦值。
cos()求指定double类型参数的余弦值。
tan()求指定double类型参数的正切值。
asin()求指定double类型参数的反正弦值。
acos()求指定double类型参数的反余弦值。
atan()求指定double类型参数的反正切值。
atan2()将笛卡尔坐标转换为极坐标,并返回极坐标的角度值。
toDegrees()将参数转化为角度。
toRadians()将角度转换为弧度。
random()返回一个随机数,0~1的小数
Random ra = new Random();ra.nextInt();
String类
字符串常量,String对象创建后不能修改,修改其实是创建了新的对象,指向内存空间不同。
intlength()
charcharAt(int index)
byte[]getBytes()
使用平台的默认字符集将此String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
intindexOf(int ch)
Stringsubstring(int)
StringBuffer和StringBuilder类
和 String 类不同,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuffer是线程安全,StrignBuilder没有,所以性能略高,一般优先考虑StringBuilder。
常用方法:
publicStringBuffer append(String s)
将指定的字符串追加到此字符序列。
publicStringBuffer reverse()
将此字符序列用其反转形式取代。
publicdelete(int start, int end)
移除此序列的子字符串中的字符。
publicinsert(int offset, Object)
将 Object 参数的字符串表示形式插入此序列中。
replace(intstart, int end, String str)
使用给定 String 中的字符替换此序列的子字符串中的字符。
其他类似String类方法。
Date和SimpleDateFormat类
java.util 包提供了 Date 类来封装当前的日期和时间
Date( )// 使用当前日期和时间来初始化对象
Date(long millisec)//从1970年1月1日起的毫秒数。
System.currentTimeMillis()//获得系统时间毫秒数
boolean after(Date date)
boolean before(Date date)
Object clone( )
int compareTo(Date date)
boolean equals(Object date)
long getTime( )//返回自 1970 年 1 月 1 日 00:00:00 GMT以来此 Date 对象表示的毫秒数。
void setTime(long time)//用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。
使用 SimpleDateFormat格式化日期
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-ddHH:mm;ss”);
String today = sdf.format(d);
sdf.parse(str);//将字符串解析为时间
字母 描述 示例
G 纪元标记 AD
y 四位年份 2001
M 月份 Julyor 07
d 一个月的日期 10
h A.M./P.M. (1~12)格式小时 12
H 一天中的小时 (0~23) 22
m 分钟数 30
s 秒数 55
S 毫秒数 234
E 星期几 Tuesday
D 一年中的日子 360
F 一个月中第几周的周几 2 (second Wed. in July)
w 一年中第几周 40
W 一个月中第几周 1
a A.M./P.M.标记 PM
k 一天中的小时(1~24) 24
K A.M./P.M. (0~11)格式小时 10
z 时区 EasternStandard Time
' 文字定界符 Delimiter
" 单引号 `
Calendar类
java.util.Calendar是一个抽象类
Calendarc = Calendar.getInstance();//默认是当前日期
c.set(int year, int month, int date, int hourOfDay,int minute,int second)
c.setTime(Date d);
c.set(Calendar.DATE,10);
c.add(Calendar.DATE, 10);
常量 描述
Calendar.YEAR 年份
Calendar.MONTH 月份
Calendar.DATE 日期
Calendar.DAY_OF_MONTH 日期,和上面的字段意义完全相同
Calendar.HOUR 12小时制的小时
Calendar.HOUR_OF_DAY 24小时制的小时
Calendar.MINUTE 分钟
Calendar.SECOND 秒
Calendar.DAY_OF_WEEK 星期几
int year = c.get(Calendar.YEAR);
Date date = c.getTime();
Long time = c.getTimeInMillis();