以下内容,学习于狂神说Java b站视频
第一次发博客,发了两天才发现图片上传有问题,不少图片都错位了
现在修正了一下,有问题希望指出
代码编译后不会被执行
Java所有的组成部分都需要名字。类名、变量名以及方法名哦都被称为标识符。
关键字: java自身定义好的,例如:public、static、class等。
强类型语言
弱类型语言
Java的数据类型分为两大类
基本数据类型
整数类型
byte占1个字节:-128–127
short占2个字节:-32768–32767
int占4个字节:-2147483648–2147483647
long占8个字节:-9223372036854775808–9223372036854775807
浮点型
float占4个字节
double占8个字节
字符型
char占2个字节
布尔类型
占1位,其值只有true和false两个
引用数据类型
类
接口
数组
什么是字节
拓展:
进制
public class Demo03 {
public static void main(String[] args){
//整数拓展: 进制 二进制0b 十进制 八进制0 十六进制0x
int i = 10;
int i2 = 010;//八进制0
int i3 = 0x10;//十六进制0x 0~9 A~F
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
}
}
由于Java是强类型语言,所以在进行某些运算的时候,需要进行类型转换。
低---------------------------------------------------->高
byte,short,char,int,long,float,double
运算中,不同类型的数据先转换为同一类型,然后进行运算
强制类型转换:高–>低
public class Demo05 {
public static void main(String[] args) {
int i = 128;
byte b = (byte)i;//内存溢出
//强制转换 (类型)变量名 高-->低
System.out.println(i);
System.out.println(b);
System.out.println("======================");
//精度问题
System.out.println((int)23.7);
System.out.println((int)-48.89f);
}
}
public class Demo05 {
public static void main(String[] args) {
int i = 128;
double b = i;
//自动类型转换 低-->高
System.out.println(i);
System.out.println(b);
System.out.println("================");
char c = 'a';
int d = c + 1;
System.out.println(d);
System.out.println((char)d);
}
}
注意:
不能把布尔值进行转换
不能把对象类型转换为不相干的类型
把高容量转换为低容量时,需要强制转换
转换的时候可能存在内存溢出,或者精度问题
溢出问题:
public class Demo06 {
public static void main(String[] args) {
//操作比较大的数的时候,注意溢出问题
//JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000;
int years = 20;
int total = money*years;
System.out.println("total = "+total);//输出-1474836480,溢出
long total2 = money*years;
System.out.println("total2 = "+total2);//输出-1474836480,还是溢出
//注意:先计算money*years(此时已经溢出),再赋值给total2
long total3 = money*((long)years);//先把其中一个数转换为long
System.out.println("total3 = "+total3);//输出20000000000,此时溢出问题解决
}
}
变量是什么:就是可以变化的量!
Java是一种强类型语言,每个变量都必须声明其类型
Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域
type varName [=value] [{
,varName[=value]}];
//数据类型 变量名 = 值; 可以使用逗号隔开来声明多个同类型变量
注意事项:
类变量
实例变量
局部变量
public class Demo08 {
//类变量 static
static double salary = 2500;
//属性:变量
/*实例变量:
从属于对象;若不进行初始化,则这个类型的默认值为 0 0.0
布尔值:默认值为false
除了即便类型,其余的默认类型是null
* */
String name;
int age;
//main方法
public static void main(String[] args) {
//局部变量:必须声明和初始化值
int i = 10;
System.out.println(i);
//变量类型 变量名字 = new Demo08()
Demo08 demo08 = new Demo08();
System.out.println(demo08.age);
System.out.println(demo08.name);
//类变量 static
System.out.println(salary);
}
//其他方法
public void another(){
}
}
常量(Constant):初始化(initialize)后不能再改变的值!
所谓常量就是一种特殊的变量,它的值一旦被设定,在程序运行过程中不允许被改变
final 常量名=值;
final double PI = 3.14;
常量名一般使用大写字符
public class Demo09 {
//static final是修饰符,不存在先后顺序
static final double PI = 3.14;
public static void main(String[] args) {
System.out.println(PI);
}
}
Java语言支持下列运算符
算术运算符:+,-,*,/,%,++,–
public class Demo01 {
public static void main(String[] args) {
//二元运算符
//Ctrl + D :复制当前行到下一行
int a = 10;
int b = 20;
int c = 35;
int d = 40;
System.out.println("a+b = " + (a+b));
System.out.println("a-b = " + (a-b));
System.out.println("a*b = " + (a*b));
System.out.println("a/b = " + (a/(double)b));
System.out.println("===============");
System.out.println("c/b = " + (c/(double)b));
System.out.println("c/b = " + (c/b));// / 取小数点前面的整数
System.out.println("c%b = " + (c%b));//%取余数
System.out.println("===============");
long a1 = 123456789123123113L;
int b1 = 123;
short c1 = 10;
byte d1 = 8;
System.out.println(a1+b1+c1+d1);//不同类型的整数相加,如果有long同一转换为long类型
System.out.println(b1+c1+d1);//其余均为int
System.out.println(c1+d1);//int
System.out.println("====================");
//++ -- 自增,自减 一元运算符
//++在前面,先自+1再赋值
//++在后面,先赋值,在自加1
int a2 = 3;
System.out.println("a2 = "+ a2);
int b2 = a2++;//a2++ 先将a2的值赋值给b2,再执行a2 = a2 + 1
System.out.println("b2 = "+ b2);
System.out.println("a2 = "+ a2);
System.out.println("====================");
int c2 = 3;
System.out.println("c2 = "+ c2);
int d2 = ++c2;//++c2 先执行c2 = c2 + 1,再把c2的值赋值给d2
System.out.println("d2 = "+ d2);
System.out.println("c2 = "+ c2);
}
}
赋值运算符:=
关系运算符:>,<,>=,<=,==,!=,instanceof
public class Demo03 {
public static void main(String[] args) {
//关系运算符返回的的结果:正确,错误 布尔值
int a = 10;
int b = 20;
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
System.out.println(a!=b);
}
}
逻辑运算符:&&,||,!
package operator;
//逻辑运算符
public class Demo05 {
public static void main(String[] args) {
//与(&&) 或(||) 非(!)
boolean a = true;
boolean b = false;
System.out.println("a && b: " + (a&&b) );//逻辑与运算:两个变量都为真,结果为真
System.out.println("a || b: " + (a||b) );//逻辑或运算:两个变量有一个为真,结果为真
System.out.println("!(a && b): " + !(a&&b) );//逻辑非运算:如果是真,则变为假;如果是假,则变为真
//短路运算:前面条件为假,则后面的条件不被运行,直接输入假
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(d);
System.out.println(c);
}
}
package operator;
public class Demo06 {
public static void main(String[] args){
/* 位运算,与二进制有关
A = 0011 1100
B = 0000 1101
--------------
A&B = 0000 1100 与 比较对应位上的二进制,如果对应位同为1,则对应位输出1,如果对应位有一个不为1或者全为0,则输出0
A|B = 0011 1101 或 对应位上有一个为1,则输出1,全为0,则输出0
A^B = 0011 0001 异或 对应位同为1或同为0,则输出0,对应位不同,则输出1
~B = 1111 0010 取反 将每一位取相反值,是1则取0,是0则取1
--------------------
2*8 = 16 2*2*2*2
<< 左移 相当于乘法 *2
>> 右移 相当于除法 /2
2<<3 = 2*2*2*2
因为 2的二进制在计算机中是 0000 0010
而2<<3相当于2*2*2*2=16,16的二进制 0001 0000
观察2和16的二进制,可以看出是把1向左移动了3位
同理 8>>3 = 8/2/2/2 = 1
8 0000 1000
1 0000 0001
把1向右移动3位 实际上就是除以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 = "+(2<<3));
System.out.println("8>>3 = "+(8>>3));
}
}
条件运算符(三目运算符):? :
package operator;
//三元运算符
public class Demo08 {
public static void main(String[] args) {
// x ? y : z
//如果x为真,则结果为y,否则结果为z
int score = 80;
String type = score < 60 ? "不及格" : "及格";
System.out.println(type);
}
}
扩展赋值运算符:+=,-=,*=,/=
package operator;
public class Demo07 {
public static void main(String[] args){
int a = 10;
int b = 20;
int c = 30;
a+=b; //a = a + b
c-=b;//c = c - b
System.out.println(a);
System.out.println(c);
}
}
字符串拼接
“”+a+b 双引号在开头,则全以字符串形式输出
a+b+""+c 双引号不在开头,则双引号前面的正常相加,后面拼接字符串
package operator;
public class Demo07 {
public static void main(String[] args){
int a = 10;
int b = 20;
int c = 30;
//字符串拼接
//""+a+b 双引号在开头,则全以字符串形式输出
//a+b+""+c 双引号不在开头,则双引号前面的正常相加,后面拼接字符串
System.out.println(" "+a+b);
System.out.println(a+b+" "+a+b+c);
}
}
包的本质就是一个文件夹
为了更好地组织类,Java提供了包机制,用于区别类名地命名空间。
包语句地语法格式为
package pkg1[.pkg2[pkg3...]];
一般利用公司域名倒置作为包名:com.LinYIN.xxx
为了能够使用某一个包的成员,需要在Java程序中声明导入该包,使用import语句完成
import packge1[.package2...].(classname|*);
import com.LinYIN.xxx*导入这个包下所有的类