01_标识符和关键字
-
java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符
-
所有的标识符都应该以字母(a-z)美元符号$,下划线(_)开头
-
首字符之后可以是字母,美元符号,下划线或数字的任意组合
-
不能使用关键字作为变量名或方法名
-
标识符是大小写区分的
-
可以使用中文命名,但是一般不建议
-
02_数据类型
-
Java是强类型语言
要求变量的使用严格符合规定,所有变量都必须先定义后才能使用
-
java的数据类型分为两大类
-
基本类型(primitive type)
String //字符串 这个不是关键字,是一个类 byte //整数类型 -128—127 short //整数类型 -32768—32767 int //整数类型 常用 long //整数类型 要在这个类型后加L,long=100L float //浮点类型 要在这个类型后加F,float=59.34L double //浮点类型 char //字符类型 只能使用一个字符 boolean //布尔类型 值只有true(是)和false(否)
-
引用类型(reference type)
引用类型有:类,接口,数组
-
-
String类型的内容无法使用==进行比较,可以使用
变量名.equals()
这个方法比较
03_数据类型扩展
-
进制转换
二进制0b 八进制0 十六进制0x
int i=0b10; //二进制 int i1=010; //八进制 int i1=0x10; //十六进制 //上面的三种方法分别代表了三种进制的输出方式
-
浮点数
float f=0.1f; double d=0.1; System.out.println(f==d);
最后输出的结果是false;
由于浮点型存在舍入误差
最好完全避免使用浮点数进行比较
-
字符型
所有的字符本质上还是数字
在java中有Unicode表,可以在表中查询到
-
转义字符
\n //换行 \t //空格
String sc=new String"hello" String sb=new String"hello" Syste.out.println(sc==sb);
打印的结果是false
原因:
字符串和数组的值在堆中存, 他本身在栈中储存着,new的意思是创建新的地址,它比较的是地址值
-
布尔值扩展
boolean flag=true; if(flag==true){} if(flag){}
这两种方法都是一样的,在java中有表示
Less is More! 代码有精简易读
04_类型转换
-
由于java是强类型语言,所有进行有些运算时,是需要强制转换的
-
强制类型转换 :(类型)变量名 高~低
-
自动转换 低~到
-
1:不能对布尔类型进行转换
2:不能把对象类型转换为不相干的类型
3:在把高容量转换到低容量的时候,强制转换
4:转换的时候可能存在内存溢出,精度丢失的问题
5:操作比较大的时候,注意溢出问题
6:jdk7新特性,数字之间可以用下划线分割
public static void main(String[] args){
int money=10_0000_0000;
int years=20;
long tota1=money*(long)years;
}
先把一个数转化为long类型
数据类型排序表:
低 | 高 | |||||
---|---|---|---|---|---|---|
byte | short | char | int | long | float | double |
05_变量
变量就是可以变化的量!
java是一种强类型语言,每个变量都必须声明其类型。
java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域
-
注意:
每个变量都有类型,类型可以是基本类型,也可以是引用类型
变量名必须是合法的标识符
变量声明是一条完整的语句,因此每一个声明都必须以分号结束
类变量:
//加了一个static,从属于这个类
static double a=18.1;
实例变量:
public class a {
String name="name";
public static void main(String[] args) {
a a=new a();
System.out.println(a.name);
}
}
从属于对象,如果不自行初始化,就会用这个类型的默认值
整数型数据默认值是0;浮点型默认值是0.0;字符默认是null;布尔型默认是false
局部变量:
//必须声明和初始化值,定义在方法中
int i=10;
06_常量
常量:初始化后不能再改变值!不会变动的值
所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行中不可被改变过
常量名一般使用大写字符
static final double PI=3.14;
修饰符不存在先后顺序。
变量命名规范:
-
所有变量、方法、类名要做到见名知意
-
类成员变量:首字母小写和驼峰原则:除第一单词外,所有单词首字母大写 lastname 驼峰原则:lastName
-
局部变量:首字母小写和驼峰原则
-
常量:大写字母和下划线
-
类名:首字母大写和驼峰原则
-
方法名:首字母小写和驼峰原则
07_运算符
-
算术运算符:+,-,*,/,%,++,--
-
赋值运算符:=
-
关系运算符:<,>,<=,>=,==,!=,instanceof
关系运算符返回的结果只有布尔类型的true和false
-
逻辑运算符:&&(与),||(或),!(取反)
-
位运算符:&,|,^,~,>>,<<,>>>(了解)
-
条件运算符:?,:
-
扩展运算符:+=,-=,*=,/=
a+=b; a=a+b a-=b; a=a-b
不同数据类型运算时自动转换为容量大的数据类型。
如果运算出的结果小数点后有多位数字,可以通过以下方式保留小数点:
//保留小数点后两位
//第一种
System.out.printf("%.2f%n",2.5555);
//第二种
System.out.println(String.format("%.2f", 2.5555));
自增自减运算符
int a=3;
int b=a++; //执行完这行代码后,先给b赋值,再自增
//a=a+1
System.out.println(a);
//a=a+1
int c=++a; //执行这行代码前,先自增,在给b赋值
System.out.println(a);
System.out.println(b);
System.out.println(c);
a就是c运算后赋的值,b++的值为4,但是先赋的值是3(输出就为3了),然后自增1,变成了4,到c的时候先自增后在加1,最后的结果就是5了,最后又赋值给了a,a最后的结果就是5
int a=1;
int b=1;
int c=a++ + ++b;
//a先进入运算再自增(运算中为1),b自增后进入运算(运算中为2)
System.out.println(c);
//c=3
-
逻辑运算符
&&:与 (两个变量为真,则结果为true)
|| : 或(两个变量有一个为真,则结果为true)
! : 取反(如果是真,则变为假;如果为假,则变为真)
位运算符
A= 0011 1100
B= 0000 1101
A&B: 0000 1100
//如果两个数都为1,结果才为1,否则为0
A|B: 0011 1101
//如果两个数都为0,结果才为0,否则为1
A^B: 0011 0001
//如果两个位置相同则为0,不同则为1
~B: 1111 0010
//如果是0变成1,是1变成0
<< 左移 增大
>> 右移 减小
0000 0000 0
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
0001 0000 16
//以上二进制中发现,每次1向前进一位,其代表的十进制数字便乘以它本身
2<<3 代表2在二进制中左移3位 (也是2*2*2*2 左移一次,乘一次2)
2>>3 代表2在二进制中右移三位(也是2/2/2/2 右移一次,除一次2)
int a=10;
int b=20;
System.out.println(""+a+b);
//字符串在前会进行拼接
System.out.println(a+b+"");
//字符串在后则会进行运算
//由于运行的顺序是由上往下,从左至右进行运行的,后面运行的数据类型会被转换成第一个运行的数据类型
-
三元运算符
x ? y : z
如x结果为true,则结果返回y,否则结果为z
int score=90;
String type=score<60?"不及格":"及格";
//如果score小于60,则返回“不及格”,否则返回“及格”