java基础
java基础知识
标识符
- 标识符包含类名,方法名,变量名,常量名
- 以字母、美元符号($)、下划线(_)开头
- 以字母、美元符号($)、下划线(_)、数字组成
- 区分大小写
- 不能使用关键字
数据类型
- 基本数据类型
八大基本数据类型
-
byte:8位(-27~27-1)
-
short:16位(-215~215-1)
-
int:32位(-231~231-1)
-
long:64位(-263~263-1)
-
float:单精度,32位(1.4E - 45 ~ 3.4028235E38)
-
double:双精度,16位(4.9E - 324 ~ 1.7976931348623157E308),java中小数常量默认为double,如果要给float变量赋值则要加F或f
-
char:字符型,16位(0 ~ 2^16 - 1) 占两个2字节,存储Unicode值 例如: char n = 'A';
A对应的ASSII码值为65,a对应的ASSII码值为97,其余的字母累加即可。
-
boolean://boolean为布尔基本类型,数值为true或者false
- 引用数据类型
除了基本数据就是引用数据
- 类
- 接口
- 数组(String是引用类型)
进制
- 二进制,0b
- 八进制,0
- 十六进制,0x
- 十进制
浮点型的bug
在实际应用中需要避免浮点型比较大小或者是用来精确计算。
因为无论是float还是double都存在舍入误差,无法精确表达0.1或者是任何10的负n次方
System.out.println( 1.03 - . 42 ); // 答案是0.6100000000000001 !
System.out.println( 1.00 - 9 * . 10 ); // 答案0.09999999999999995 !
解决办法一般采用BigDecimal或者是int,long类型
转义字符
\n 回车(\u000a)
\t 水平制表符(\u0009)
\b 空格(\u0008)
\r 换行(\u000d)
\f 换页(\u000c)
\' 单引号(\u0027)
\" 双引号(\u0022)
\\ 反斜杠(\u005c)
类型转换
-
自动类型转换
低类型到高类型的转换
- 若参与运算量的类型百不同,则先转换成同一类型,然后进行运算。
- 转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。
A.若两种类型的字节数不同,转换成字节数高的类型
B.若两种类型的字节数相同,且一种有符号,一度种无符号,则转换成无符号类型 - 所有的浮点运算回都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
- char型和short型参与运算时,必须先转换成int型。
- 在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为答左边量的类型。如果右边量的数据类型长度左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。
eg1: int i = 100; double j = i; //自动将int转换成double eg2: short a = 32767; byte b = 127; int c = 1000000000; System.out.println(b*c); //-1849018880,溢出,并不会转换成long类型 System.out.println(a*b); //4161409, 没有溢出,自动换成int类型 eg3: long a = 123123123123123L; //long数据类型需要在赋值的后面加上L或者l,因为l和1不太好区分,建议这种赋值添加L,float后面也需要添加F,同建议添加F int b = 123; short c = 10; byte = d =8; System.out.println(a+b+c+d); //long,因为long类型的数据参与计算,最后是long类型 System.out.println(b+c+d); //int,没有用long类型的数据参与计算,结果为int System.out.println(c+d); //int,默认类型是int,所以没有int参与计算依然是int类型
-
强制类型转换
- (类型) 变量名
- 不能对布尔值进行转换
- 不能把对象类型转换成不相干类型
- 转换时需要注意内存溢出和精度问题
int money = 10_0000_0000; //JDK7新特性,数字中可以用下划线进行分割,便于阅读 System.out.println(money);
引用类型的比较
String类型变量的比较
String a = new String("Hellow,World!");
String b = new String("Hellow,World!");
String c = "Hellow,World!";
String d = "Hellow,World!";
System.out.println(a==b); //输出false,new会开辟一个地址用来存储引用类型数据,进行比较比较的是地址
System.out.println(c==d); //输出true,
变量
- 变量类型
- 变量名
- 变量作用域
- 类变量:从属于类,必须声明,如果不初始化,会自动初始化为0或者null,boolean初始化为false,一个对象改变,其余实例化的对象也会跟着一起改变。
- 实例变量:从属于对象,必须声明,如果不初始化,会自动初始化为0或者null,boolean初始化为false。
- 局部变量:必须声明和初始化。
public class HelloWorld {
static boolean a;
boolean b;
public static void main(String[] args) {
int c = 1;
HelloWorld hw = new HelloWorld();
System.out.println(a); //输出false
System.out.println(hw.b); //输出false
System.out.println(c); //输出1
}
}
常量
一般用大写字母来命名常量
final double PI = 3.14;
//修饰符不区分前后,下面两种方式是一样的
static final double PI = 3.14;
final static double PI = 3.14;
变量名命名规则
//变量名命名规则驼峰原则,小写字母开头,后面的单词首字母大写
monthSlary;
//常量,大写字母,下划线,美元符号组成
MAX_VALUE;
//类名,单词首字母大写
MonthSalary;
//方法名
runRun();
运算符
- 算术运算符:+,-,*,/,%,++,--
- 赋值运算符:=
- 关系运算符:>,<,>=,<=,==,!=,instanof
- 逻辑运算符:&&,||,!
- 位运算符:&,|,^,~,>>,<<,>>>
- 条件运算符?:
- 扩展赋值运算符:+=,-=,*=,/=
String类型的加法
System.out.println(10+20+""); //输出30,30+“” -》 “30”
System.out.println(""+10+20); //输出1020,“1020”
包机制
- 一般用公司域名的倒置作为包名:www.baidu.com com.baidu,www
- 导包import
import package1.package2.package3.classname;
import package1.package2.package3.*; //*表示通配符,即包里所有的类
javaDoc
- author 作者
- version 版本号
- since 指明需要最早使用的JDK版本
- param 参数名
- return 返回值
- throws 异常抛出情况
导出javaDoc的方式
- 命令行中 调用javadoc
javadoc -encoding UTF-8 -charset UTF-8 HelloWorld.java
- IDEA中tool->导出 javaDoc