Java笔记:基础部分
基础部分
注释
// 单行注释 /* 多行注释 */ /** 文档注释 */
包
包的命名规范
所有字母都小写
公司网址倒写(例如: sdbina.com包名为 com.sdbina)
推荐两层或两层以上包
同包下不允许出现同名类
标识符和变量
标识符命名规范
可以是字母、数字、下划线"_"、美元符"$"的任意组合,但不能用数字开头
标识符大小写敏感,长度无限制
标识符不可以是关键字
标识符的使用规范
类名首字母大写,每个单词的首字母大写,例如Man, GoodMan
方法和变量第一个单词小写,从第二个单词开始首字母大写,如eat(), eatFood()
变量和常量
int a = 123; // 定义一个变量a final int b = 100; // 定义一个常量b,常量初始化后其值不可修改
数据类型
java数据类型分为三大类:
八大基本数据类型
JDK提供的其它数据类型
自定义数据类型
整数数据类型
浮点类型
注:java允许把低精度值赋给高精度类型变量,但是默认不允许直接把高精度值赋给低精度变量。
浮点数定义
float a = 123131.2313123F; // 浮点数书写的时候最后必须加F/f double b = 1.23213123123; // 双精度,默认增加D/d
注意:浮点类型数据不适合在不容许舍入误差的金融计算领域。如果要进行不舍入误差的精确数字计算,需要使用BigDecimal类。
float f = 0.1f; double d = 1.0/10; System.out.println(f==d); // 结果为false 注:不要使用浮点数进行比较,比较使用BigDecimal类
Boolean类型
说明:布尔类型取值只能是true或false。是八大基本数据类型中唯一不能和其它七个类型进行类型转换的数据类型。
定义
boolean flag = true;
Char类型
说明:字符类型,只可以存储一个字符,可以是字母、中文、符号等。无论存储什么内容都会对应Unicode的一个字符编号。
定义
char c = 'a';
char转int
char c = 'a'; System.out.println((int)c); // 结果:97
算数运算符
运算结果
java是一种强类型语言,经过数学计算后结果是最高精度类型。
如果float和double类型的两个数进行操作,结果为double
如果long和int类型的两个数进行运算,结果为long
如果short和short或byte进行运算,结果为int
自增自建运算
注意:++和--符号根据位置的不同其含义也不同
符号在前,先计算再输出,符号在后,先输出在计算
int a = 1; System.out.println(a--); // 输出1 a = 1; System.out.println(--a); // 输出
int a = 10; int b = (++a) + 6; System.out.println(b); // 输出17 System.out.println(a); // 输出11
基本数据类型转换
隐式转换
java中低精度值赋给高精度值会由编译器自动转换,这种情况成为隐式转换,又称自动类型转换。
byte a = 10; short b = a; int c = b; long d = c; float e = d; double f = e;
显式转换
由高精度值赋给低精度值必须由程序员手动类型转换,这种需要在代码中写出来的类型转换称为显式转换,又称强制类型转换
注:如果高精度值超出了低精度值的取值范围,可以正常运行,但是会以byte进行截取,所以会得到意料之外的值。所以在强制类型转换时尽量保证高精度变量中值不超过低精度类型的取值范围。
使用方法:
long a = 10; int b = (int) a;
比较运算符
== 是否相等
!= 是否不等
> 大于
< 小于
>= 大于等于
<= 小于等于
运算符优先级
算数运算符>比较运算符>逻辑运算符>赋值运算符
逻辑运算符
if语句
语法
Scanner scan = new Scanner(System.in); int b = scan.nextInt(); if (b == 0) { System.out.println(0); } else if (b == 1) { System.out.println(1); } else { System.out.println(2); }
Switch语句
语法
Scanner scan = new Scanner(System.in); int b = scan.nextInt(); switch (b){ case 1: System.out.println('1'); break; case 2: System.out.println('2'); break; case 3: System.out.println('3'); break; default: // 如果上述条件不满足,执行default中内容 System.out.println("其它"); }
while循环
while循环先判断再循环,循环体可能一次也没执行
示例:
int i = 1; while (i <= 5) { System.out.println("i=" + i); i++; } /* 输出 i=1 i=2 i=3 i=4 i=5 */
do-while循环
do-while循环先执行再判断,循环体至少执行一次
// 打印1-10之间的整数 int i = 1; do { System.out.println(i); i++; } while (i <= 10);
for循环
// 打印1-100之间的整数 for (int i = 1; i <= 100; i++) { System.out.println(i); }
常用进制
二进制
定义
int c = 0b11011; System.out.println(c); // 输出:27
二进制转十进制
权相加法:
十进制转二进制
除二取余,逆序排列
八进制
定义
以0开头
int d = 015; System.out.println(d); // 结果:13
十六进制
定义
0x开头
int d = 0x15; System.out.println(d); // 结果:21
原码反码补码
原码
计算机中数据存储都是使用最高位作为符号位。0表示正数、1表示负数。
例:2的原码
反码
反码存在的意义就是解决正负数相加时结果不正确的情况。
反码:符号位不变,其他位按位取反。正数的反码还是原码。
反码计算规则: 0加0得0,1加0得1, 1加1得0产生进位。最高位如果产生进位结果加一
反码科学计算
正数和负数相加
负数和负数相加
正数和负数的绝对值相等相加
补码
补码的结论:正数的补码还是原码、负数的补码是反码+1.
在计算机中存储的都是补码。使用封装类打印数字的二进制数据时打印出来的也是补码。
补码科学计算
正数和负数绝对值相等相加
负数和负数相加
移位运算符
移位运算符是在二进制数字的基础上进行的。
有<<左位移、>>右位移、>>>无符号位移三个位移运算符
左位移<<
左位移就是把数字的二进制数据(补码)整体向左移动,右侧用0补齐,移动时首位符号位也跟随移动,移出去的内容丢失。
byte和oshort类型移动时先转换为int在进行移动。
意义:如果移动后的数字没有超出类型的最大取值范围,本质就是移动几位,这个数字乘以2的几次方。
int num = 2; num = num << 2; System.out.println(num); // 结果:8
int num = -2; num = num << 2; System.out.println(num); // 结果:-8
特殊情况:移位后超出范围
给出int变量值2147483647/int的最大值),对应的二进制数据为:
左位移一位后变成
右位移>>
右位移时左侧补充符号位。
byte和short右位移时转换为int后在移位。
右位移几次就是除以2的几次方
int num = 4; num = num >> 1; System.out.println(num); // 结果:2
特殊情况:正数右位移最小值为0
特殊情况:负数右位移最小值为-1
无符号右位移>>>
无符号右移是无论数字为正数和负数,右移时左侧都补0.
所以正数右移的结果就是除以2的n次方,最小为0,负数右移结果会变大,随着移动的位数逐渐变小,最后为0.
位运算符
常见的按位运算符有按位与&、按位或|、按位非-、按位异或^
按位与&
规则:全1为1,否则为0
int a = 13; int b = 5; System.out.println(a&b); // 结果:5
按位或|
规则:有1为1,全0为0
int a = 13; int b = 5; System.out.println(a|b); // 结果:13
按位异或^
规则:不同为1,相同为0
int a = 13; int b = 5; System.out.println(a^b); // 结果:8
按位非~
规则:按位取反,对于同一个数字类型进行按位非
int a = 13; System.out.println(~a); // 结果:-14
三目运算符(条件运算符)
案例:比较两个数a、b的大小,如果a大输出a,如果b大输出b
int a = 10; int b = 20; int num = a>b?a:b; System.out.println(num); // 结果:20
String类型
创建语法
String str1 = new String("你好啊"); // 方式一 String str2 = "你好啊"; // 方式二
Scanner类
创建语法
Scanner scan = new Scanner(System.in);
调用方法
Scanner scan = new Scanner(System.in); int num = scan.nextInt(); // 接收控制台输入的整数并赋值给num String str = scan.next(); // 接收控制台输入的字符串并赋值给str scan.close(); // 关闭扫描器
封装类
Java中八大基本数据类型都有自己对应的封装类,那么为什么每个类型都对应-个类呢?
因为类中提供了方法,而我们可以利用这些方法实现某些功能。而八大基本数据类型的变最是不能调用方法。
八大基本数据类型对应封装类
封装类创建对象的语法
示例:除了Character的值不支持String类型,其它的七个类型都是既支持本身类型数据又支持String类型数据。
Byte b = Byte.valueOf("100"); Short s = Short.valueOf("100"); Long l = Long.valueOf("100"); Integer i = Integer.valueOf("100"); Float f = Float.valueOf("1.1"); Double d = Double.valueOf("1.1"); Boolean bo = Boolean.valueOf("true"); Character c = 'a';
说明:封装类和基本数据类型除了封装类对象可以调用方法,而基本数据类型不能调用方法特点以外,使用起来没有什么明显却别。甚至可以把封装类对象赋值给基本数据类型变量。
int i = new Integer("100");
案例:使用封装类将String字符串类型转为int类型数据
String str = "123"; // 将String转成int int num = Integer.parseInt(str); System.out.println(num);
封装类中常用方法
十进制数和二进制、八进制、十六进制的转换
String s1 = Integer.toBinaryString(3); // 十进制转八进制 String s2 = Integer.toOctalString(132); // 十进制转十六进制 String s3 = Integer.toHexString(132); System.out.println(s1); // 11 System.out.println(s2); // 204 System.out.println(s3); // 84 // 获取自己类型的最大值和最小值 System.out.println(Integer.MAX_VALUE); // 2147483647 System.out.println(Integer.MIN_VALUE); // -2147483648