一、Java中变量的分类
1、按类型分:
(1)基本数据类型,整数型的默认值是0,浮点型的默认值是0.0,布尔型的默认值是false,字符型的默认值是‘\u0000’(空字符,NUL字符,null字符)
(2)引用数据类型,class类型的默认值是null,数组类型([]类型)的默认值是null
2、按位置分:
(1)成员变量(在类中定义的变量)
- 成员变量的数据类型可以是基本数据类型也可以是引用数据类型
- 成员变量可以进行显式初始化,也可以进行默认初始化。成员变量的默认初始化是由Java虚拟机(JVM)在使用new关键字创建对象时自动进行的,发生在任何构造方法的调用之前。
- 成员变量的作用域为整个类体,即可在整个类体中对成员变量进行访问和修改
- 成员变量也可在特定类的语句块中被访问
(2)局部变量(在方法和代码块中声明的变量)
- 局部变量的数据类型可以是基本数据类型也可以是引用数据类型
- 局部变量只能进行显式初始化
- 局部变量的作用域为整个方法体或整个代码块体
- 在方法的参数列表中定义的参数变量也是局部变量
3、注意:
(1)java中的变量在使用前都必须进行初始化
(2)类中非静态的成员变量和成员方法都必须通过创建出来的对象来进行调用
(3)数据类型:变量或数据可存储的信息的类型
二、构造方法
1、定义:具有下述三个特点的方法是构造方法
(1)方法名与类名相同
(2)无返回值
(3)无void修饰
2、使用时的注意事项
(1)我们可以在类中显示定义无参构造方法和有参构造方法
(2)如果类中没有显示定义任何构造方法,编译器会自动生成一个无参构造方法。所生成的无参构造方法不会执行任何特定的初始化操作,但它为对象的创建提供了一种基本方式
(3)一个类可以有多个构造方法
3、举例
(1)定义Car类中的无参构造方法和有参构造方法
public Car(){
}
Car(String b,String c,float p){
brand=b;
color=c;
price=p;
}
(2)使用Car类中的无参构造方法和有参构造方法
public static void main(String[] args) {
Car car=new Car("宝马","红色",8);
System.out.println(car.price);
System.out.println(car.brand);
System.out.println(car.color);
Car car1=new Car();
System.out.println(car1.price);
System.out.println(car1.brand);
System.out.println(car1.color);
}
三、方法的重载
1、定义:方法的重载是指一个类中具有方法名相同但参数不同的多个方法的现象
2、参数不同体现在以下两个方面:
(1)数量不同
- 构造方法
public Car(){
}
Car(String b,String c,float p){
brand=b;
color=c;
price=p;
}
- 成员方法
public void start(){
System.out.println(brand+"启动");
}
public void start(int speed){
System.out.println(brand+"以"+speed+"公里每小时的速度启动");
}
(2)数量相同但参数列表的某一位置或某几个位置上对应的数据类型不同
- 构造方法
Car(String b,String c,float p){
brand=b;
color=c;
price=p;
}
Car(String b,float p,String c){
brand=b;
color=c;
price=p;
}
- 成员方法
public void start(int speed){
System.out.println(brand+"以"+speed+"公里每小时的速度启动");
}
public void start(double speed){
System.out.println(brand+"以"+speed+"公里每小时的速度启动");
}
3、意义:
做同一件事,但可以传入不同的参数
4、注意:
(1)如果某类方法出现了方法重载的现象,当调用该类方法时,编译器会查看调用方法时使用的参数数量、参数顺序和参数类型,然后与类中定义的重载方法进行匹配,找到参数匹配的重载方法进行调用。这个匹配过程发生在编译阶段,不在运行时,所以不会影响程序的运行效率
(2)方法的重载与有无返回值以及返回值类型无关
四、对象与引用
1、引用类型:Java语言中除基本类型之外的变量类型都是引用类型,引用类型是变量类型
2、引用:具体的一个引用类型的变量,如Car car;Car类是引用类型,car是引用,引用的值是对象在内存中的地址
3、Java程序中的对象都是通过引用对其进行操作的
4、对象与内存关系图(对象的创建与引用的使用)
五、参数传递
在Java程序中调用方法传递参数时,参数传递有两种类型:
1、值传递
(1)定义:方法的形参类型是基本数据类型
(2)过程:方法调用时,实参把它的值传递给对应的形参,形参用实参的值初始化自己的存储单元
(3)特点:由于实参和形参是两个不同的存储单元,所以方法在执行中形参值的改变不会影响到实参值
举例:
public class Test {
public static void main(String[] args) {
int a=0;
Test t=new Test();
t.test(a);
System.out.println(a);
}
public void test(int b){
b=1;
}
}
2、引用传递
(1)定义:方法的形参类型是引用数据类型
(2)过程:方法调用时,实参把它的值传递给对应的形参,形参用实参的值初始化自己的存储单元。由于实参的值是对象的地址值,实参指向对象,因此此时形参与实参指向的是同一对象的地址
(3)特点:由于实参和形参指向的是同一地址,在方法执行中对形参的操作实际上就是对实参的操作,操作结果会在方法结束后被保留下来,所以对形参的操作会影响对实参的操作
举例:
public class Test {
public static void main(String[] args) {
Car car=new Car();
car.brand="宝马";
Test t=new Test();
t.test(car);
System.out.println(car.brand);
}
public void test(Car c){
c.brand="奔驰";
}
}
3、注意
(1)基本类型传递的是数据值本身,引用类型传递的是对对象的引用
(2)无论是值传递还是引用传递,其本质传递的都是值,所以可统称为值传递