目标:
表达式和流程控制
corejava_day3
表达式和流程控制
1. 实例变量和局部变量
程序的基本功能是处理数据,程序中需要使用变量来接收并表示数据。
程序中的变量必须先定义之后才能使用。
定义变量包括定义变量的“类型”以及变量的“名字”。
例如:int a; Student s;
程序中的变量分为实例变量和局部变量。
- 实例变量(又称属性、全局变量、成员变量)
位置:
直接定义在类中,属于类中的一种成员(成员变量/成员方法)
例如:
public class Student() {
public String name;
}
作用范围:
是指变量定义之后,都在哪些地方可以被访问到。
由于实例变量是直接定义在类中的,所以在定义的时候课以使用修饰符进行修饰。
例如:这四种修饰符的作用之后会介绍到
public class Student() {
public String name1;
protected String name2;
String name3;
private String name4;
}
以上是使用了四种访问权限控制修饰符来修饰了这四个变量。
但是不管是哪种修饰符情况,实例变量再当前类中的每一个方法都是可以被访问到的(static修饰的静态方法除外)。
public class Student {
public String name1;
protected String name2;
String name3;
private String name4;
// 类中的方法里面可以直接访问实例变量
public void run() {
System.out.println(name1); // null
System.out.println(name2); // null
System.out.println(name3); // null
System.out.println(name4); // null
}
}
默认值:
类的中实例变量声明后,如果我们没有显式赋值的话,每种实例变量其实都是有自己的默认值的。
实例变量的赋值分为隐式赋值和显式赋值
隐式赋值就是JVM给它赋的值(就是说的默认值)
显式赋值就是我们主动给它赋的值
例如:
public class Student {
public int a;
public float f;
public char c;
public boolean b;
public String str;
public void println() {
System.out.println(a); // 0
System.out.println(f); // 0.0
System.out.println(c); //
System.out.println(b); // false
System.out.println(str); // null
}
}
基本类型的实例变量:
整型:默认值为0
浮点型:默认值为0.0
布尔型:默认值为false
字符型:默认值为0或者 ‘\u0000’
引用类型的实例变量:
默认值都是null
生命周期:
实例变量是属于对象的,一个对象被创建出来,这个对象中的实例变量就有了,直到这个对象被GC当做垃圾回收之后,这个实例变量也就没有了。
- 局部变量
位置:定义在方法的代码块中或者方法的参数列表中
例如:a b c d四个都是局部变量
public void test(int a) {
int b;
{
int c;
}
if(true) {
int d;
}
}
作用范围:
- 如果是定义在方法的参数列表中,那么在当前方法的任何位置都可以访问该局部变量。例如:
public void test(int a) {
System.out.println(a);
{
System.out.println(a);
}
if(true) {
System.out.println(a);
}
}
- 如果是定义在方法中,那么就要看这个局部变量是“直接”位于哪一对大括号内。例如:
public void test() {
int a;
{
int b;
}
if(true) {
int c;
}
}
观察局部变量a/b/c三个分别是“直接”位于哪一对大括号内,那么这个局部变量的作用范围就在哪一对大括号
如果访问的地方出了这个范围,那么是访问不到这个局部变量的。
默认值:局部变量是“没有”默认值的,我们只能显式的赋值之后才能使用该变量,否则会编译报错。
例如:
// 编译通过
// 只定义了变量但是没有使用
public void test() {
int a;
}
// 编译报错
// 因为在使用局部变量之前没有赋值
public void test() {
int a;
System.out.println("a = " + a);
}
// 编译通过
// 只有在使用之前赋值就可以了
// int a = 1;
// 当然声明的同时就赋值也是可以的
public void test() {
int a;
a = 1;
System.out.println("a = " + a);
}
声明周期:
当方法被调用,代码执行到局部变量的声明这一刻开始,这个局部变量就出现了,直到局部变量“直接”位于的大括号内中的代码执行结束的时候,该变量在内存中也就释放消失了。
例如:
// test方法执行完,变量a就没有了
public void test() {
int a;
}
// if代码块执行完,变量b就没有了
public void test() {
if(true) {
int b;
}
// 这里是访问不到变量b的,编译报错
System.out.println("b = " + b);
}
2. Java中的操作符(operator)
- 赋值操作符:
= 如: int x = 0,i = 1,j = 1;
*= 如: a *= b 等价于 a = a * b;
/= 如: a /= b 等价于 a = a / b;
%= 如: a %= b 等价于 a = a % b;
+= 如: a += b 等价于 a = a + b;
-= 如: a -= b 等价于 a = a - b;
其他的都是类似情况
a += 1; a++
特殊情况:i++ 和 ++i
i++表示先使用i的值,然后再让1自增1。
++i表示先让i的值自增1,然后再使用i的值。
例如:
int a = 1;
System.out.println(a++); // 1
System.out.println(a); // 2
int b = 1;
System.out