Java学习笔记(二)
一.数据类型
Java是一种强类型语言,要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。
Java的数据类型分为两大类:
(1)基本类型
a.数值类型:整数型(byte,short,int,long),浮点型(float,double)
b.字符类型(char)
c.布尔类型(boolean)
(2)引用类型
a.类(class)
b.接口(interface)
c.数组
基本数据类型名称 | 基本数据类型定义 | 取值范围 | 字节数 |
---|---|---|---|
boolean | 布尔值,作二元判断 | true, false | 占1位 |
byte | 8位有符号整数 | -128 ~ 127 | 1 |
short | 16位有符号整数 | -32768 ~ 32767 | 2 |
int | 32位有符号整数 | -2147483648(-231)~ 2147483647(231-1) | 4 |
long | 64位有符号整数 | -263~ (263-1) | 8 |
float | 32位浮点数 | 1.4E-45 ~ 3.4028235E38 | 4 |
double | 64位浮点数 | 4.9E-324 ~ 1.7976931348623157E308 | 8 |
char | 16位Unicode字符 | 0 ~ 65535 | 2 |
注意:
(1)Float和Double的最小值和最大值都是以科学记数法的形式输出的,结尾的“E+数字”表示E之前的数字要乘以10的多少倍。
比如3.14E3就是3.14×1000=3140,3.14E-3就是3.14/1000=0.00314。
(2)Java语言中,默认的整数类型是int类型,声明long类型的时候,后面必须要加个l(字母L的小写)或者L,建议使用大写L,防止和数字1混淆,如:30L;
(3)Java语言中,默认的浮点数类型是double,声明float类型的时候,后面必须添加字母f或者F,如3.14F,3.14f;
(4)Java语言中,char类型为16位Unicode字符,Unicode字符中的取值不存在负数范围,所以它的取值范围为 0 ~ 65535,—— 有点类似 “无符号数”
代码:
public class demo {
public static void main(String[] args) {
//八大数据类型
//整数
int num1=10;//最常用
byte num2=20;
short num3=30;
long num4=30L;//long类型要在数字后面加一个L
//小数:浮点数
float num5=50.1F;//float类型要在数字后面加一个F
double num6=3.141592653;
//字符
char name='a';
//字符串,String不是关键字,是类
String namea="林漂亮";
//布尔值:代表是非,只有true,false
boolean flag=true;
boolean flag1=false;
}
}
拓展:
public class demo03 {
public static void main(String[] args) {
//整数拓展:进制 二进制0b开头 十进制 八进制0开头 十六进制0x开头
int i=10;
int i2=010;//八进制
int i3=0x10;//十六进制 0-9,A-F
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println("================================");
//==================================
//浮点数拓展
//==================================
//flaot : 有限 离散 存在舍入误差 大约 接近但是并不等于
//double
float f=0.1f;
double d=1.0/10;
System.out.println(f==d);//判断f和d是否相等,false
float d1=22669885858f;
float d2=d1+1;
System.out.println(d1==d2);//true
System.out.println("================================");
//==================================
//字符拓展
//==================================
char c1='a';
char c2='中';
System.out.println("c1="+c1);
System.out.println("c1="+(int)c1);//强制类型转换
System.out.println("c2="+c2);
System.out.println("c2="+(int)c2);//强制类型转换
//所有字符的本质还是数字
//转义字符
// \t 制表符
// \n 换行
//.....
System.out.println("Hello\tWorld!");
System.out.println("Hello\nWorld!");
//布尔值扩展,Less is more! 代码要精简易读
boolean flag=true;
if(flag){}//老手
if(flag==true){}//新手
}
}
二.类型转换
在运算过程中,不同类型的数据先转化成同一类型,然后再进行计算。
类型转换:
(1)强制类型转换 (类型)变量名 高–低
(2)自动类型转换 低–高
低-----------------------------------------------------------高
byte,short,char -> int -> long -> float -> double
注意点:
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.在把高容量转换到低容量的时候,强制转换
4.转换的时候可能存在内存溢出,或者精度问题!
三.变量
1.变量:可以变化的量!
2.Java是一种强类型语言,每个变量都必须声明其类型。
3.Java变量是程序中最基本的存储的单元,其要素包括变量名,变量类型和作用域。
格式:
数据类型 变量名 = 值;//可以使用逗号隔开来声明多个同类型变量
注意事项:
a.每个变量都有类型,类型可以是基本类型,也可以是引用类型。
b.变量名必须是合法的标识符。
c.变量声明是一条完整的语句,因此每个声明都必须以分号结束。
四.常量
常量:初始化后不能再改变的值,不会变动的值!
所谓常量可以理解为一种特殊的变量,他的值被设定后,在程序裕兴过程中不允许被改变。
常量名一般使用大写字符。
格式:
final 常量名 = 值;
final double PI = 3.14;
五.变量的命名规范
1.所有变量,方法,类名:见名知意
2.类成员变量:首字母小写和驼峰原则:monthSalary
3.局部变量:首字母小写和驼峰原则
4.常量:大写字母和下划线:MAX_VALUE
5.类名:首字母大写和驼峰原则:Man,GoodMan
6.方法名:首字母小写和驼峰原则:run(),runRun()
六.运算符
1.算术运算符:+,-,*,/,%。++,–
注意:
前++或–,先自增或自减,再执行代码
后++或–,先执行代码,后自增或自减
2.赋值运算符:=
3.关系运算符:>,<,>=,<=,==,!=instanceof
4.逻辑运算符:&&,||,!
5.位运算符:&,|,^,~,>>,<<,>>>
6.条件运算符:A?B:C 如果A为真,则B,否则C
7.扩展赋值运算符:+=,-=,*=,/=
代码:
//算术运算符
public class Demo02 {
public static void main(String[] args) {
long a=111225555L;
int b=123;
short c=10;
byte d=2;
System.out.println(a+b+c+d);//Long
System.out.println(b+c+d);//int
System.out.println(c+d);//int
}
}
//逻辑运算符
public class Demo03 {
public static void main(String[] args) {
//与(and) 或(or) 非(取反)
boolean a=true;
boolean b=false;
System.out.println("a&&b:"+(a&&b));//逻辑与运算:两个变量都为真,结果才为true
System.out.println("a||b:"+(a||b));//逻辑或运算:两个变量有一个为真,则结果才为true
System.out.println("!(a&&b):"+!(a&&b));//如果为真,则变为假,如果是假则变为真
//短路运算
int c=5;
boolean d=(c<4)&&(c++<4);
System.out.println(d);
System.out.println(c);
}
}
//位运算符
public class Demo04 {
public static void main(String[] args) {
/*二进制
A= 0011 1100
B= 0000 1101
--------------------
A&B= 0000 1100 均为0/1,则为0/1.其他为0
A|B= 0011 1101 均为0,则为0,其他为1
A^B= 0011 0001 均为0/1,则为0,其他为1
~B= 1111 0010 全部取反
面试题:
2*8=16怎么最快? 2*2*2*2
效率极高
<< *2
>> /2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2<<3);
}
}