java-day9
目录
instanceof:判断一个指定对象,是否属于一个指定的类型
早上
第一节课
类中的静态变量是属于类的,可以通过类名.来调用
实例变量是属于对象的,通过对象.来调用
类中的非静态方法都可以访问类中的实例变量
public class Student{
private String name;//实例变量
public void test1(){
System.out.println(this.name);//调用实例变量
}
public void test2(){
System.out.println(this.name);
}
public void test3(){
int a=1;//局部变量
System.out.println(a);//调用局部变量
}
}
第二节课
操作符(下面的$为%)
1、赋值操作符
= 最基础的赋值操作
如:int a=1; int x=0;
*=一个变量和另外一个数据相乘,并把结果赋值给这个变量
如:int a=1;a*=2;//a=a*2;
/=一个变量和另外一个数据相除,并把结果赋值给这个变量
如:int a=6;a/=2;//a=a/2;
%=一个变量和另外一个数据相余,并把结果赋值给这个变量
如:int a=5;a%=2;//a=a%2;
+=一个变量和另外一个数据相加,并把结果赋值给这个变量
如:int a=5;a+=2;//a=a+2;
+=一个变量和另外一个数据相加,并把结果赋值给这个变量
如:int a=5;a-=2;//a=a-2;
2、比较操作符
注意:比较操作符的结果是boolean类型
> 如:int a=1;int b=2;
boolean result= a>b;
System.out.println(result);
>= 如:int a=1;int b=2;
boolean result= a>=b;
System.out.println(result);
< 如:int a=1;int b=2;
boolean result= a<b;
System.out.println(result);
<= 如:int a=1;int b=2;
boolean result= a<=b;
System.out.println(result);
第三节课
类中的非静态方法和非静态属性都是必须使用类中的对象进行访问
类中的静态方法和静态属性都可以使用类名进行访问
char类型也可以进行比较,比较的是字符编码后的数据大小
但是boolean类型不能比较会报错
和对象相关的比较操作符
instanceof:判断一个指定对象,是否属于一个指定的类型
Student s == new Student();
boolean result;
result = (s instanceof Student);
result = (s instanceof Object);
注意:一个java对象,一定是使用了java中某一个确定的类型来创建出来的我们就可以是这个对象a属于这个类型x,但是java中的类型并不是一个单一的对象,类和类之间具有继承或实现的关系。
在做一个对象的类型强制转换的时候,可以使用instanceof关键在,来判断一下 这个对象是否属于接来下要做强制转换的那个类型,然后返回true,则说明我们 接下来是可以做类型强制转换的,如果返回false,则说明接下来不能做类型强制 转换。
相等操作符
== 比较两边的数据是否相等
!= 比较两边的数据是否相等
使用:
比较基本类型数据(八种)是否相等
比较引用类型数据(对象)是否相等
下午
第一节课
算术操作符
+
//数字之间是有+,表示两个值相加
int a = 1+2
double b = 1+2
//字符之间使用+,表示俩个字符进行编码后的值相加
char c1 ='a';//97
char c2 = 'a';//97
int result = C1+C2;
System. out. print1n( result);//194
//字符串之间使用+,表示俩个字符串拼接
//注意,也可以使用+=
//例如:
String result;
result = "hello"+"world";
result += "tom"; // result = result +”tom";
String s1 = "hello";
String s2 = "\n";
String s3 = "world";
result = s1+s2+s3;
//字符串和基本类型数据直接使用+,结果都会变成字符串类型
String result;
byte a1 = 1;
short a2 = 2;
int a3 = 3;
1ong a4 = 4L;
float a5 = 5.0F;
double a6 = 6.0D;
char a7 = 'a';
boolean a8 = true;
result = str + a1;//"he11o 1"
result = str + a2;//"hello 2"
result = str + a3;//"hello 3"
result = str + a4;//"he1lo 4"
result = str + a5;//"he1lo 5.0"
result = str + a6;//"hello 6.0"
result = str + a7;//"he1lo a"
result = str + a8;//"he1lo true'
System.out.println(result);
思考1:1和“1”在java中的区别
在没有主动声明数据类型的情况,1在java中默认是int类型的,而“1”是String类型。
思考2:1如何转换为“1”?
int a = 1;
String str = a + "";//"1"
思考3:“1”如何转换为1?
int a = Integer.parseInt("1");
第二节课
-
//两个数字相减
int a=2;
int b=1;
int c=a+b;
*
//两个数字相乘
int a=2;
int b=1;
int c=a*b;
/
//两个数字相除
int a=2;
int b=1;
int c=a/b;
/**
注意:
两个数据都是int类型(整型),这里除是整除的意思
得到的结果只要整数部分,不要小数。
*/
double a=5/2; //2.0
double a1=5/2.0; //2.4
%
//两个数字求余
int a=2;
int b=1;
int c=a%b;
自增和自减操作:++ --
++
int a = 1;
a+=1;//---->简写为a++
//特殊情况:
byte a=1;
a=a+1;//编译报错 a+1的结果是32位的int
byte a=1;
a+=1;//编译通过
byte a=1;
a++;//编译通过
byte a=127;
a++;//编译通过
System.out.println(a);//-128
/*
127的byte类型二进制:0111 1111
0111 1111 + 1 = 1000 0000(表示-128)
其实这个操作应该是127+1=128,然后从byte转为int类型
就是正常的128,由于++和+=操作的特殊性,导致加完以后没
有转换类型,结果还是byte就出现了这种情况。
*/
第三节课
++操作还分为a++和++a
共同之处:都是让a自增1
不同之处:一个先取值再加1,一个先加1再取值
-- 的相关特点和上面的++是类似的。
移位操作符
>> 算术右移运算,也叫做带符号右移运算【带符号】
int a1=12>>1;
0000 1100 >>1
0000 0110-->【6】
int a2=-12>>1;
1111 0100 >> 1
1111 0100移动出的1位直接去掉
1111 010 最后变为.
11111 010 补位
1111 1010 调整一下
0000 0101(取反)
+
0000 0001(+1)
-----------
0000 0110 ---->6 所以结果为-6
注意,这个操作的本质就是除以2^N,这个N就是我们右移的位数。
除完2^N之后,只保留整数部分。
正数右移之后,最左边补0
负数右移之后,最左边补1
<< 算术左移运算,也叫做带符号右移运算
int a1=12<<1;
0000 1100 <<1
0001 1000(补位,不分正负,最右边全补0)
【24】
注意,这个操作的本质就是乘以2^N,这个N就是我们左移的位数。
无论正/负数,左移后,最右边一律补0
【特殊情况】
左移之后,得到数字已经超出当前类型所能显示的值,这个值
会被限定到当前类型中,最终显示的值会和我们逻辑计算不同。
特殊情况
逻辑右移位运算 >>>【不带符号】
int a1=12,result;
result=a1>>>1;//【6】
/*
注意,这个操作的本质就是除以2^N,这个N就是我们右移的位数。
除完2^N之后,只保留整数部分。
正数和负数右移之后,最左边空出的位置都要补0
*/
int a2=-12,result;
result=a2>>>1;//【2147483642】
1111 0100 【-12】
0111 1010