@TOC
🎖️Java主类结构
Java语言是面向对象的程序设计语言,Java程序的基本组成单元是类,类体中又包含属性和的方法两部分。每一个应用程序都必须包含一个main()方法,所以,含有main()方法的类就称为主类。
包声明→声明成员变量和局部变量→编写主方法→导入API类库
package Number ;//声明一个包
public class Frist{
String s1 = "你好";//声明成员变量(全局变量)
public static void main(String[] arg){//编写主方法,主方法的public是权限修饰符,static静态修饰符,void返回值修饰符
String s2 = "Java";//声明局部变量
System.out.println(s1);//
System.out.println(s2);//输出结果
}
}
成员变量和局部变量的区别:
通常将类的属性称之为全局变量(成员变量),将方法中的属性称之为局部变量。
成员变量(全局变量)声明在类体中,局部变量声明在方法体中。
全局变量和局部变量都有自己的有效范围:
由于变量被定义出来后只是暂时存放在内存中,等到执行到某一个点,该变量就会被释放掉,可以理解为变量有它自己的生命周期,一般根据变量的“有效范围”,就将变量分为“全局变量”和“局部变量”。
全局变量(成员变量):成员变量在整个类中都有效,类的成员变量又分为两种,“静态变量”和“实例变量”
静态变量 实例变量前加static关键字 static 变量类型 变量名;(静态变量的有效范围可以跨类,甚至可以用到整个应用程序,调用方法:类名.静态变量)
局部变量:因为局部变量定义在方法体中,所以有效范围也就是只在当前方法代码块中有效
全局变量和局部变量都有自己的有效范围:
由于变量被定义出来后只是暂时存放在内存中,等到执行到某一个点,该变量就会被释放掉,可以理解为变量有它自己的生命周期,一般根据变量的“有效范围”,就将变量分为“全局变量”和“局部变量”。
全局变量(成员变量):成员变量在整个类中都有效,类的成员变量又分为两种,“静态变量”和“实例变量”
静态变量 实例变量前加static关键字 static 变量类型 变量名;(静态变量的有效范围可以跨类,甚至可以用到整个应用程序,调用方法:类名.静态变量)
局部变量:因为局部变量定义在方法体中,所以有效范围也就是只在当前方法代码块中有效
🎖️运算符
运算符:赋值运算符,算术运算符,自增自减运算符,比较(关系)运算符,逻辑运算符,位运算符,三元运算符
赋值运算符:是一个二元运算符(顾名思义对两个操作数处理),用“=”表示,例如:
public class Ecal{
public static void main(String[] arg){
int a,b,c;
a=15;
b=c=a-1;
System.out.println("b的值为"+b);
System.out.println("c的值为"+c);
}
}
注意:赋值运算符除了用“=”表示意外,还有复合运算符
“/=”:a /= 2,可以表示为a=a/2;
“*=”:a *= 2,可以表示为a=a*2;
“+=”:a += 2,可以表示为a=a+2;
“-=”:a -= 2,可以表示为a=a-2;
如:
public class Val1 {
public static void main(String[] arg){
int a=10;
System.out.println("a/=2的值为:"+(a /= 2));//此时a=5
System.out.println("a*=2的值为:"+(a *= 2));//此时a等于10
System.out.println("a+=2的值为:"+(a += 2));//12
System.out.println("a-=2的值为:"+(a -= 2));//10
System.out.println("a%=2的值为:"+(a %= 2));//0
System.out.println(a*2);
}
}
算数运算符:(+,-,*,/,%)(属于二元运算符)
package com.ymy.work;
public class afterAll{
static float num1=1.21f;
public static void main(String[] args) {
byte num2 = 120;
System.out.println("num1+num2的和为:"+(num1+num2));
System.out.println("num1-num2的差为:"+(num2-num1));
System.out.println("num1*num2的和为:"+(num1*num2));
System.out.println("num1/num2的和为:"+(num1/num2));
}
}
自增自减运算符:++a,--a,a++,a--,(属于单目运算符)
++a(--a):先做运算a+1(a-1);
a++(a--):在使用变量之后做运算;
public class afterAll{
public static void main(String[] args) {
int a =2;
int v =a++;
System.out.println(v);//输出结果2
int a1=2;
int v1 =++a1;
System.out.println(v1);//输出结果3
int a2=2;
int v2 =a2--;
System.out.println(v2);//输出结果2
int a3=2;
int v3 =--a3;
System.out.println(v3);//输出结果1
}
}
比较运算符:运算结果为Boolean型(>,<,>=,<=,==,!=)。(属于二元运算符)通常作为判断的一句用在条件语句中
public class afterAll{
public static void main(String[] args) {
int number1=4;
int number2=5;
/**依次将变量number1和变量number2的比较结果输出*/
System.out.println("number1>number2的比对结果:"+(number1>number2));//false
System.out.println("number1<number2的比对结果:"+(number1<number2));//true
System.out.println("number1!=number2的比对结果:"+(number1!=number2));//true
System.out.println("number1>number2的比对结果:"+(number1==number2));//false
System.out.println("number1>=number2的比对结果:"+(number1>=number2));//false
System.out.println("number1>=number2的比对结果:"+(number1>=number2));//false
}
}
逻辑运算符:&&,||,!
除了“!”是单目运算符,其余两个都是二元运算符,返回类型为Boolean值的表达式,逻辑运算符的操作元必须是Boolean型数据。
public class afterAll{
public static void main(String[] args) {
int a =4;
int b =5;
int c =6;
System.out.println(a<b&&b<c);//两个都为真,结果为true
System.out.println(a<b||b>c);//一真一假,结果为true
System.out.println(!(a<b&&b<c));//真的前面加非,结果为false
}
位运算符:(位逻辑运算符)和(位移运算符)
(位逻辑运算符)》按位与,按位或,按位取反,按位异或。
按位与:运算符位“&”,是二元运算符,运算法则为:两个整型数据对应位都是1,结果才为1,否则为0;
按位或:运算符位“|”,是双目运算符,运算法则为:两个整型数据对的位都是0,结果才为0,否则为1;
按位取反:运算符“~”,是单目运算符,运算法则为:“按位非运算”,就是将操作数二进制中的1改为0,把0改为1;
按位异或:运算符“^”,是双目运算符,运算法则为:只有两个操作数的二进制表示相同(同时为0或同时为1),结果才为0,否则为1;
(位移运算符)》左移位,右移位,无符号右移位。
”<<“:左移位
”>>“:右移位
”>>>“:无符号右移位
技巧:移位运算符适用的数据类型都是整型(也包含字符型char,因为Java采用的是Unicode无符号编码,而这么多字符里面每一个字符都有自己的字符码,因为字符码也可以当作整型,所以char和int可以进行显示(强制)转换)
移位可以实现整数乘以或除以2^n的效果,比如:
y<<2 那他就等于y* 2^2
y<<100 那他就等于y* 2^100
y<<n 那他就等于y* 2^n
反之
y>>2 那他就等于y/ 2^2
y>>100 那他就等于y/ 2^100
y>>n 那他就等于y/ 2^n
无符号右移:无论最高位(符号位)是0还是1,左侧被移空的高位都填0
学习位运算符,要先知道源码,反码,补码。
原码、反码、补码的出现是为了方便计算机表示、计算负数参与的加减法运算。因此,原码,反码,补码是机器存储一个具体数字的编码方式。
原码:在数值前直接加一符号位的表示法,对于8位二进制来说:
[+7]原= 0 0000111 [-7]原= 1 0000111
反码:正数的反码与原码相同;负数的反码,符号位为“1”,数值部分按位取反。
[+7]反= 0 0000111 [-7]反= 1 1111000
补码:正数的补码和原码相同;负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加1,也就是“反码+1”。
[+7]补= 0 0000111 [-7]补= 1 1111001
其中正整数的原码、反码和补码都一样;
负数部分:
原码和反码的相互转换:符号位不变,数值位按位取反;
原码和补码的相互转换:符号位不变,数值位按位取反,末位再加1;
已知补码,求原码的负数的补码:符号位为1,数值位全部取反,末位再加1。
总结:原码、反码和补码是用于表示带符号整数的三种编码方式。原码表示直观,反码解决了加法问题,而补码不仅解决了加法问题,还能够自然处理负数的表示和溢出问题。在计算机中,补码表示是最常见和有效的带符号整数表示方式。
三元运算符(三目运算符):条件式?值1 : 值2;
public class Val1 {
public static void main(String[] arg){
boolean b=20<23?true:false;//条件式返回的Boolean值为真
System.out.println(b);//所以就会返回?后面的第一个值,结果为true
boolean b1=256<23?true:false;//条件式返回的Boolean值为假
System.out.println(b1);//所以就会返回?后面的第一个值,结果为false
}
三目运算符等价于 if ... else 语句
public class Val1 {
public static void main(String[] arg){
boolean a;
if (23<45)
a=true;
else
a=false;
System.out.println(a);
}
}
🎖️数据类型
整型:(Byte short,int,Long)
其中:byte占1个字节(8位) 取值范围 -128~127
short占2个字节(16位) 取值范围-32768~32767
int占4个字节(32位) 取值范围-21亿4748万3648~21亿4748万3647(Java默认整型类型)
Long占8个字节(64位) 取值范围 很大 在声明变量类型是,变量值要加 L 或则 l 作为后缀
浮点型:float,double
float占4个字节(32位) 在声明变量类型时,要在变量值的后面加 F 或 f 作为后缀
double占8个字节(64位) Java默认浮点类型
字符型:用于存储单个字符,在定义字符变量时用单引号表示,char占2个字节(16位),
拓展:引用数据类型
数组、类、接口、注解、枚举
🎖️进制(常用进制)
十进制:我们日常生活中都是使用的是十进制;日常生活中采用的是十进制进行数据的描述。
==>权重:10^0,10^1,10^2..........
二进制:在计算机底层采用的是二进制对数据进行描述
==>权重:2^0,2^1,2^2,.............
由于在现实生活中数据具有正负数之分,因此呢,二进制中采用最高位来代表符号位。
若是0,代表非负数;若是1,则代表负数;(注意:计算机中一般都是32位或64位的二进制数)
进制之间的转换(这个是计算机底层的原理,尽量掌握)
(1)正十进制转换二进制的方法:
a:除2取余法:使用十进制的数字不断除以2,直到商为0时,将余数逆序排序即可
b:拆分法(自己的理解):将十进制的整数拆分为若干个二进制权重的和,若有该权重下面写1,没有该权重下面写0;
(2)正二进制转十进制的方法:
a:加权法:将二进制的每个数字乘以当前位的权重,加起来,就取到了十进制的数字;
(3)负的十进制转二进制:
a:取绝对值法:将负数的绝对值进行转换二进制,然后进行按位取反再加1;
(4)负二进制转10进制:
a:先减一,然后按位取反,符号位不变,最后按加权法求出结果加负号
`c 计算机存储使用的是二进制的补码,要牢记哦