一.方法传参
基本数据类型和引用数据类型数据在传参时区别:
基本数据类型,操作传递的是变量的值,改变一个变量的值不会影响另一个变量的值。引用数据类型(类、数组和接口),赋值是把原对象的引用(可理解为内存地址)传递给另一个引用 (看数组的排序 正序 倒序和 反向输出那个作业)
二.对象数组作参数
//创建3个Dog类对象 //对象也可以理解为一个容器,这个容器中可以存储多个不同类型的数据(体现在对象的属性上),至于这个对象能够存储多少个数据取决于对象的类里定义了多少个属性Dog dog1 = new Dog(); //给属性赋值 dog1.name = "奥迪"; dog1.age = 2; dog1.gender = '公'; Dog dog2 = new Dog(); //给属性赋值 dog2.name = "宝马"; dog2.age = 2; dog2.gender = '母'; Dog dog3 = new Dog(); //给属性赋值 dog3.name = "奔驰"; dog3.age = 2; dog3.gender = '公';
//我希望将这个三个dog对象存储到数组中 //数据类型[] 数组名 = new 数据类型[数组长度]; //数据类型[] 数组名 = new 数据类型[]{数据1,数据2,...,数据n}; //数据类型[] 数组名 = {数据1,数据2,...,数据n};Dog[] dogs = {dog1,dog2,dog3}; //取出数组中第一个元素,数组中的元素是dog对象,直接输出对象,输出的是地址值 System.out.println( dogs[0]); //可以输出取出来的对象的属性值 System.out.println(dogs[0].name); System.out.println(dogs[0].age); System.out.println(dogs[0].gender); System.out.println("--------------------"); //遍历dogs数组,输出数组中所有dog对象的所有属性值 for(int i =0;i< dogs.length;i++){ System.out.println(dogs[i].name); System.out.println(dogs[i].age); System.out.println(dogs[i].gender); System.out.println("-----"); }
三.构造方法
构造方法和普通方法的区别:
- 构造方法 就是给对象的数据进行初始化的
- 普通方法 完成特定功能的代码块
//每定义一个类,系统默认给这个类添加一个无参构造方法,并且隐藏不显示 /* 构造方法: 访问修饰符 类名([形参列表]){ } * 构造方法的特点: * 1)构造方法没有返回值,void也不写 * 2)构造方法的名称与类名相同 * 3)当你在类中添加了其它的构造方法,会覆盖类中默认添加的无参构造方法,如果你还需要使用无参构造方法,就需要手动添加一个 * * * */public Animal(String type,String name,int age,char gender,double height,double weight,String color){ }
this关键字
- 在this ()在一个构造方法中通过this调用一个其他构造方法时,要放在第一行
- 当类中的成员变量和一个局部变量重名时,this关键字调用成员变量(全局变量)
- 也可以调用类里的其他方法 (但是this也可以省略)
public Animal(String type,String name,int age,char gender,double height,double weight,String color){
//在这里使用this关键字表示你创建的对象,谁调用该构造方法,this就表示谁
this.type =type;
this.name=name;
this. age=age;
this.gender=gender;
this.height=height;
this.weight=weight;
this. color=color;
}
构造方法的重载
自定义构造方法 方法名相同 参数项(多少,顺序不行和下面不一样)不同 与返回值、访问修饰符无关 此时系统不再提供默认无参构造方法
四.方法的重载
方法重载: * 1)在同一个类中 * 2)方法名相同 * 3)参数列表不同(体现在参数的个数、类型、顺序上面) * 4)与返回值类型无关 * 5)与访问权限修饰符无关
* @param num1 参数1,是一个int类型的数据
* @param num2 参数2,也是一个int类型的数据
* @return 返回num1和num2的和
*/
public int sum(int num1,int num2){
return num1+num2;
}
//定义一个求3个int类型数据之和的方法
public int sum(int num1,int num2,int num3){
return num1+num2+num3;
}
//定义一个求2个double类型数据之和的方法
public double sum(double num1,double num2){
return num1+num2;
}
//定义一个求1个int类型数据与1个double类型数据之和方法
public double sum(int num1,double num2){
return num1+num2;
}
//定义一个求1个int类型数据与1个double类型数据之和方法
public double sum(double num1,int num2){
return num1+num2;
}
五.成员变量和局部变量的区别
作用域不同
- 局部变量的作用域仅限于定义它的方法
- 成员变量的作用域在整个类内部都是可见的
初始值不同
- Java会给成员变量一个初始值
- Java不会给局部变量赋予初始值
注
- 在同一个方法中,不允许有同名局部变量
- 在不同的方法中,可以有同名局部变量
- 在同一个类中,成员变量和局部变量同名时,
- 局部变量具有更高的优先级
局部变量必须赋值才能使用,全局变量有默认值
public class Text { public int a =2; public static void main(String[] args) { int a=12; System.out.println(a); } }
//12
六.普通代码块
作用就是限定变量的生命周期
当大括号执行后,里面的变量也会消失
提供内存的利用率
七.总结
- 基本数据类型和引用数据类型在参数传递时的区别是什么?
- 成员变量和局部变量有何区别?
- 方法重载有何特点?
- 构造方法有何作用?如何定义?