2.上机练习,所有的学习都不能作假
3.危机感满满
4.day2学习上传
String 存在与双引号中的若干个字符 "hello"
char 字符'h' 'l'
类名:大驼峰
subline的快捷键:main pl
idea快捷键:psvm main sout
idea 集成开发环境
数据类型:
8种基本类型:byte short int long float double char boolean
引用类型:String 类 接口 数组
转义字符\' \n \" \t \\
学习千万不要眼高手低,哪怕是最简单的东西都是有学习的意义的
public static void main(String[] args) {
System.out.println("ab"+"cd");
String str1 = "ab";
String str2 = "cd";
System.out.println(str1+str2); //abcd
System.out.println(10+str1+str2); //10abcd
System.out.println(10+20+str1+str2);//30abcd
System.out.println(str1+str2+10+20);//abcd1020
String ret1 = 10+str1+str2;
String ret2 = 10+20+str1+str2;
String ret3 = str1+str2+10+20;
System.out.println(ret1);
System.out.println(ret2);
System.out.println(ret3);
}
任何类型的数据和字符串进行拼接结果就是一个字符串
字符串中的+号就是拼接的意思
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a = " + a + " b = " + b);
System.out.println("a+b="+(a+b)); //a+b=30
System.out.println(10+""+20); //1020
}
变量:成员变量:实例成员变量 静态成员变量(类变量) 类内部,方法的外部
局部变量:一般实在方法内部的变量
变量的作用域:变量的范围
一个变量只能包含数字字母下划线美元符
数字不能开头
不推荐下划线$开头
不要使用拼音
小驼峰 见名知意
字面值常量:10 20 1.0F true "abc"
final修饰的量为常量: final int A = 10;常量在使用前必须进行初始化
public static void main8(String[] args) {
byte b = 10; //-128 --- 127
System.out.println(b);
}
public static void main7(String[] args) {
int a = 1;
boolean b = (boolean) a;//错误
boolean c = true;
int d = (int)c; //错误
}
public static void main6(String[] args) {
int a = 10;
long l = 11; //long b = a; //把小类型给大类型,隐式类型转换
a = (int)l;
double d = a;
int c = (int)d;
float f = a;
int c2 = (int)f;
}
大的数据类型给小的数据类型要进行强制类型转换
显示类型转换,把小类型给大类型 隐式类型转换
强制类型转换不是光看字节大小决定的,例如float 和 int 之间的类型转换
boole和int之间不能进行相互转换的,boolean类型中有true 和false两种值
如果需要把范围大的类型赋值给范围小的,需要强制类型转换,但是可能精度丢失
将一个字面值常量进行复制的时候,java会自动针对数字范围进行检查
public static void main(String[] args) {
int a = 10;
long b = 20;
//int c = a + b;//报错是因为编译器自动进行类型提升,受限会把a提升为long类型,然后和b进行运算,结果为long类型
long c = a + b;
long c = (int)(a+b);
}
数值提升问题:
public static void main(String[] args) {
byte a = 1;
byte b = 2;
byte c = a + b ;//错误,因为a和b都是一个字节,计算机在处理小于一个自己的数的时候,会把小于四个字节的提升为4个字节再进行运算
byte c = 1 + 2 ;//不会报错,是因为byte d = 3
//byte c = (byte)a+b
System.out.println(c);
}
CPU按照4个字节去从内存中读写数据的,为了硬件式实现方便,byte short 一般都会提升为4个字节的类型
常量是在程序编译的时候就知道这个地方是几了
变量是在程序运行的时候才会去取这个数据
不同类型的数据混合运算,范围小的会提升为范围大的
对于short byte这种4个字节小的类型,会先提升为4个字节int再运算
int转换为String类型
public static void main(String[] args) {
//int转换为字符串
int a = 10;
String str1 = a +"";
System.out.println(str1);
String str2 = String.valueOf(a);
System.out.println(str2);
}
String转换为int
public static void main(String[] args) {
String s = "10";
int num = Integer.valueOf(s);
System.out.println(s);
}
进行转换的时候需要进行的是拿到包装类,进行转换
变量+运算符=表达式
public static void main13(String[] args) {
int a = 1;
int b = 2;
System.out.println(a / b);//结果为0
/*int c = 10;
int d = 0;
System.out.println(c/d); //报错,错误类型为算数异常,除零异常,*/
}
取模运算
public static void main(String[] args) {
int a = 10;
int b = 3;
System.out.println(a%b);//1
System.out.println(11.5%2.0);//1.5 //百分号取余可以求小数
System.out.println(-10 % -3);//-1
System.out.println(-10 % 3);//-1
System.out.println(10 % -3);//1
}
public static void main(String[] args) {
short s = 1;
// s = s + 1;编译会报错,因为转化为int转化为了short
s += 1;//帮你进行强制类型转换
System.out.println(s);
}
public static void main15(String[] args) {
int a = 10;
a += 1;
a = a + 1;
System.out.println(a);
}
public static void main(String[] args) {
int a = 10;
++a;//后置++
a++;
//int b = a++; 11 先使用后++
//int b = ++a; 10 先++后使用
System.out.println(a);
}此结论适用于-- --
关系运算符的返回值要么是true要么是false
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a == b); //false
System.out.println(a != b);//true
System.out.println(a > b);//false
System.out.println(a < b);//true
System.out.println(a >= b);//false
System.out.println(a <= b);//true
}
逻辑运算符
&& 只有前后两个表达式都为真的时候,整体才为真,短路,如果表达式1为假,就不会执行表达式2了
|| 或者 逻辑或表达式1||表达式2只要有一个为真的时候,那么整体为真,短路如果表达式1为真了,那就不执行表示式2了
! 后面跟布尔表达式 !true =false !false = true
public static void main20(String[] args) {
int a = 110;
int b = 20;
//System.out.println(!a < b);编译报错,后面只能是boolean表达式
System.out.println(!(a<b));//编译不报错
}
不推荐 & |
public static void main(String[] args) {
System.out.println(10 > 20 && 10 / 0 ==0);
System.out.println(10 > 20 || 10 / 0 ==0);
//System.out.println(10 > 20 & 10 / 0 ==0); //非短路会报错
//System.out.println(10 > 20 | 10 / 0 ==0);
}
按位& | ~
&如果对应位有0,则这一结果就是0
|如果有1就是1,其余都是0
^异或一样的位置上就是0不一样的位置上就为1
0^n=n
n^n=0
~ 0-->1 1-->0
二进制转十六进制:4位放一起转为相应的十六进制
二进制转八进制: 3位数一起转为相应的八进制
移位运算符:<< >> >>>
<< 相当于乘法,左移一位,左移不管正数负数右侧补0,相当于乘法,*2
>> 前面补符号位,相当于除法,右移以为相当于除以2的一次放,右移两位相当于除以2的平方
-1: 1111 1111 >> 1111 1111 -1
>>>无符号右移,不管符号位是0还是1统一补0 1111 1111 >>> 0111 1111
没有无符号左移没有
移动负数位或者移动位数过大都是没有意义的
关键字不能作为变量
顺序结构
选择分支结构if-esle switch
switch 的参数
可以做switch参数的基本类型:char byte short int
能做参数的特殊类型: 枚举类型 字符串类型
不能做switch参数的进本类型:float double long boolean
循环结构