复习:
1.类
一类相同的事物,共有的特点以及行为的模板
package XXX;
import XXXX;
public class XXX{
属性的定义;
修饰符 数据类型 属性名;
方法的定义;
public 返回类型 方法名
}
2.对象(实例)-------------实质就是堆区中的一块内存地址
使用某个模板创建出一块内存空间,保存模板中的数据
类与对象的关系
对象.属性()
新的变量的定义
数据类型 变量名 = new 构造器();
访问属性
变量名.属性名/方法名() ;
一.变量
实例变量(属性,成员)-哪里有对象就可以在哪里使用对象的属性
public class Stu
{
public String name;
public void say()
{
System.out.println(name);
}
}
new Stu();
1.先去堆区申请一块空间
2.复制模板中的属性和方法到申请的空间中,同时会给属性一个初始值
3.调用Stu的构造器,尝试初始化自己赋值
4.对象构建完成,将该对象在内存中的保存地址返回
1.位置
类的内部,方法的外部
2.访问的范围
3.默认值
类中的变量一旦声明,如果我们没有显式赋值,每种变量都有自己的默认值
4.声生命周期 从开始创建到变量被销毁就是一个生命周期
实例对象的生命周期伴随对象的产生而产生,伴随对象被GC回收消失
局部变量
1.位置
参数 方法内部 方法内部的代码块
2.作用范围
从声明局部变量的位置开始到这个变量直接所属的代码块结束
3.默认值
局部变量无默认值,会报错
4.声明周期
从局部变量声明开始,到他直接所属的大括号结束,局部变量就会被销毁
二.操作符
1.赋值操作符
= *= /= %= += -=
注意:
a++ 先使用,后自增
++a 先自增,后使用
2.比较操作符
所有的比较操作符都会返回一个布尔类型的值
> >= < <=
只适用于比较整数类型和浮点类型
只会比较数值,与数据类型无关
instanceof
用法:对象 instanceof 引用数据类型
判断前面的对象能不能用后面的引用数据类型去接收
public class InstanceOfTest
{
public static void main(String[] args)
{
int a = 10;
//对象 instanceof 某一个引用数据类型
//基本数据类型可以用包装器,之后会讲
String str = "Hello";
System.out.println(str instanceof String);
System.out.println(str instanceof Object);//Object 是超父类,所有的爹
// System.out.println(str instanceof InstanceOfTest);//完全就是两个不同的类,返回false,但java升级后就会报错
}
}
3.相等操作符
== !=
除了可以表示数值,还可以表示引用类型
1.基本数据类型比较的是值本身,与类型无关
2.比较引用数据类型时是比较的他的内存地址,所以地址值相等的时候才会返回true
e.q: int a = 10;
byte b = 10;
System.out.println(a==b); //返回值为true
4.相加操作符
+ : 数据类型相加或者字符串相加
1.加法表达式为同一种数据类型
int a = 10 + 20 + 30; // int来接收
public class Sum
{
public static void main(String[] args)
{
//整个表达式中同一种数据类型
//正常接收
int a = 10+ 10;
float b = 10.0f;
float c = 10.0f;
float d = b + c ;
//数值计算中特殊的
byte a1 = 10;
byte a2 = 10;
// byte a3 = a1 + a2;
// short a4 = a1 + a2;
int a5 = a1 + a2;
short b1 = 100;
short b2 = 100;
// short b3 = b1 + b2;
int b4 = b1 + b2;
System.out.println("----------");
//同一个表达式中都是数值但是类型不同,选取整个表达式最大的数据类型接收
int val1 = 10;
byte val2 = 10;
float val3 = 10.0F;
double val4 = 10.0D;
double val5 = val1 + val2 + val3 + val4;
//字符串拼接
//如果表达式加号两边只要有一边出现字符串,这时会将不是字符串的一方,这时会将不是字符串的一方先转换成字符串,然后做字符串拼接运算
System.out.println(10+20+"Hello");
System.out.println(true+"Hello"+10);
System.out.println(10+"hello"+20);
}
}
两个byte加,用int
两个short加,用int
byte a = 10;
byte b = 10;
short c = 10;
short d = 10;
int f = c + d;
int a = a + 10;
5.移位操作符
>> :算术右移操作符,带符号右移
正数取反加 1得到其对应的负数,负数取反加1得到其对应的正数
因为正数右移后补0,负数右移后补1
int a1 = 8 >> 2 //2 (8除以2的2次方)
int a5 = -8 >> 1;//-4
0000 1000
1111 0111 取反
1111 1000 +1
111 1100 >> 1
1111 1100 -8
0000 0011
0000 0100
1000 0100 //-4
>>> :逻辑右移操作符,不管正数负数都补0
<< : 左移位运算,也称为不带符号左移位运算
6.位运算操作符 均是先转化成二进制,然后再计算
& 与运算
| 或运算 与运算和或运算也可用于布尔运算,但一般不用
^ 异或运算 同为1得0,同为0得1
~ 取反运算
7.逻辑操作符
短路操作符 如果根据左边就可以推算出整个表达式的布尔值,将不执行操作符右边的布尔表达式
短路与 && 左边false,则忽略右边直接整体false
8.三目运算符 等价于if else
布尔表达式 ? 表达式1:表达式2
如果布尔为true,则表达式1,false则表达式2
Object res1 = (score>= 60 ? "true" : false)
Object可同时接收两个类型的数据
三.类型转换
1.基本类型之间的转换
隐式转换(自动转换)
把较小的数据类型用较大的表示
byte a = 10;
int b = a;
显式转换
把较大的数据类型用较小的数据类型接收需要显示转换
-----------------------
int a = 10;
byte b = (byte)a;
------------->>>转换后果自负,有风险!
2.引用类型之间的转换(要结合继承来进行转换)