一、属性:
1、成员变量和局部变量的定义:
成员变量:又称属性、字段。是指在类体内,方法体外声明的变量。
局部变量:在方法体内声明的变量。
2、成员变量与局部变量的区别:
成员变量:
(1)定义在类中,在整个类中都可以被访问。
(2)实例成员变量存在堆内存中。
(3)成员变量可以不初始化,有默认值。
默认值规则:
- 对于各种数字类型, 默认值为0.
- 对于 boolean 类型, 默认值为 false。
- 对于引用类型(String, Array, 以及自定制类), 默认值为null。
局部变量:
(1)局部变量只定义在局部范围内,如:方法内,代码块内。
(2)局部变量存在于栈内存中。
(3)局部变量没有默认初始化,每次必须显式初始化。
(4)局部变量作用范围结束,变量空间会自动施放。
3、字段初始化格式:
修饰符 类型 属性名=初值;
class Person {
public String name="zhangsan";
public int age=18;
}
修饰符:可以用来修饰变量,指明变量是公有的还是私有的。
public: 公有的,可以在本类中使用,也可以在类外部使用。
private:私有的,只能在当前类使用。
4、实例变量和类变量定义:
实例变量:又称对象变量,即没加static 的变量。
类变量: 静态变量,也就是在变量前加了static 的变量。
class Test{
public int a; //实例变量
public static int count; //类变量
}
5、实例变量与类变量的区别:
实例变量:
- 类实例化对象之后才能使用,通过对象.属性这样的方式调用。
- 属与对象私有,某一个对象将其值改变,不影响其他对象。
类变量:
- 不需要类实例化对象就可以直接使用,通过类名.属性这样的方式直接调用。
- 所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果。
public class People {
public int a; //实例变量
public static int b; //类变量
}
public class Test {
public static void main(String[] args) {
People p1=new People();
p1.a++;
People.b++;
System.out.println("p1.a="+p1.a);
System.out.println("People.b="+People.b);
People p2=new People();
p2.a++;
People.b++;
System.out.println("p2.a="+p2.a );
System.out.println("People.b="+People.b);
}
}
二、方法:
1、方法用于描述一个对象的行为。
2、语法格式:
修饰符 返回值类型 方法名(参数列表){
方法体语句;
}
修饰符:public,private,protected等。
public class Person5 {
public int age=20;
public String name="zhangsan";
public void showInfo(){
System.out.println(age);
System.out.println(name);
}
}
3、方法的参数传递:
形参:方法声明时的参数。
实参:方法调用时实际传给形参的参数值。
java里面的参数传递方式只有一种:值传递。
(1) 基本数据类型参数传递:
把实参的值传递到形参上。
public class Test {
public static void swap(int i){
System.out.println("swap方法中的参数i的值:" + i);
}
public static void main(String[] args) {
int a =8;
swap(a);
System.out.println("main方法中的a的值:" + a);
}
}
(2) 引用类型参数传递:
形参是对象,那么实参向形参传递过程中,也是把值传递给形参,这个值是实参在栈内存内存上的值,也就是引用对象在堆内存的地址。
public class Swap {
public int a=6;
}
public class Test {
public static void swap(Swap s1){
s1.a = 8;
System.out.println("在swap方法中,ds1.a的值是:" + s1.a);
}
public static void main(String[] args) {
Swap s= new Swap();
System.out.println("调用swap方法之前,ds.a的值是:" + s.a);
swap(s);
System.out.println("调用swap方法之后,ds.a的值是:" + s.a);
}
}
总结:基本数据类型,值保存在栈中;引用类型,值保存在堆中,栈中保存的是对象在堆中的地址。