三、构造方法
-
构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时由编译器自动调用,并且在整个对象的生命周期内只调用一次。
-
如果自己不写,系统默认送你一个
-
如何定义构造方法
-
构造方法的名字必须与类名相同
-
没有返回值类型,设置成void也不行
-
创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于每个人的出生,每个人只能出生一次)。
-
构造方法的作用
-
赋值和取值
-
package 构造方法; public class Demo { String name; int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
-
构造方法分类
-
无参构造
-
有参构造:给成员变量赋初始化值
package 有参构造08; public class Student { int age; public Student(int age){ this.age = age; } } package 有参构造08; public class Demo { public static void main(String[] args) { Student student = new Student(120); System.out.println(student.age); } }
构造方法赋值和set区别
-
构造方法:赋值
-
区别
-
赋值问题
-
构造方法:给初始化赋值
-
成员方法:能赋值,但是不能操作初始化
-
-
修改值问题
-
构造无法修改值
-
set方法可以改值
-
-
package 构造和set区别09; public class Student { private int id; public Student(){} public Student(int id){ this.id = id; } //set public void setId(int id){ this.id = id; } //get public int getId(){ return id; } } package 构造和set区别09; public class Demo { public static void main(String[] args) { Student student = new Student(100); System.out.println(student.getId()); //set该值 // student.setId(10); Student student1 = new Student(10); //测试 System.out.println(student1.getId()); } }
赠送:有参构造应用场景
package 有参构造的应用场景10; import java.util.Scanner; public class Student { private int id; private int age; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Student(int id, int age, String name) { this.id = id; this.age = age; this.name = name; } public Student() { } } package 有参构造的应用场景10; import java.util.Scanner; public class Demo { public static void main(String[] args) { //添加模块 Scanner scanner = new Scanner(System.in); System.out.println("请输入学号:"); int id = scanner.nextInt(); System.out.println("请输入年龄:"); int age = scanner.nextInt(); System.out.println("请输入姓名:"); String name = scanner.next(); Student student = new Student(id, age, name); /* Student student = new Student(); student.setId(id); student.setAge(age); student.setName(name);*/ //检测 System.out.println(student.getId()+" "+ student.getAge()+" " +student.getName()); } }
-
构造方法和成员方法区别
-
构造方法和成员方法的区别
-
格式区别
-
构造方法和类名相同,并且没有返回类型,也没有返回值。
-
普通成员方法可以任意起名,必须有返回类型,可以没有返回值。
-
-
作用区别
-
构造方法用于创建对象,并进行初始化值。
-
普通成员方法是用于完成特定功能的。
-
-
调用区别
-
构造方法是在创建对象时被调用的,一个对象建立,只调用一次相应构造函数
-
普通成员方法是由创建好的对象调用,可以调用多次
-
-
-
四、知识点补充
-
值传递和引用传递
-
值传递:在调用方法或者函数时,将参数的值copy一份副本,给方法使用,方法不会改变本来的数据值。
-
引用传递:引用传递恰恰相反,在调用方法函数时,将实际参数的地址给方法和函数使用,在方法和函数中的使用,会改变参数的值。
-
-
基本类型传递
-
java的基本类型一空有8个分别是整型:int,short,byte,long;浮点型:float,double;字符型:char;布尔型:Boolean。
-
package 值传递12; public class Demo { public static void main(String[] args) { int a = 10; int b = 20; change(a,b); System.out.println("a:"+a); System.out.println("b:"+b); } public static void change(int a,int b){ int temp = 0; temp = a; a = b; b = temp; System.out.println("change+a"+a); System.out.println("change+b"+b); } }
-
引用类型数据参数
-
public class Hello { public static void main(String[] args) { //声明了变量 Person per=new Person(); per.name="范建"; //调用方法 change(per); System.out.println(per.name); } //改变变量的值,该方法改变了你传递的实际参数 public static void change(Person temp) { temp.name="范统"; } }
-
String类型的特殊性。引用类型传递,体现的值传递
-
可变参
-
什么是可变参
-
所谓的方法可变参数是从JDK 1.5之后追加的一个新特性,最大的特征是解决多个参数进行统一设置的问题,实际上在整个的Java内部以及后续要学习到的各种开发框架里面都有可变参数的身影。
-
那么为什么要存在有这种可变参数的概念呢?它能够解决的问题有那些呢?要求实现一个功能,这个功能可以实现任意个整数数字的累加操作。
-
-
可变参格式
-
访问权限修饰符 返回值类型 函数名(数据类型... 变量名){ //方法体 }
package 可变参15; public class Demo { public static void main(String[] args) { add(1,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3); } //计算整数相加 可变参 :不知道几个 public static void add(int ... a){ } }
-
注意:这里的"数据类型... 变量名"格式,里面的三个点的格式是固定的,不可随便添加空格。
-
可变参注意事项
-
调用可变参数的方法时,传入实参的个数可以是0~n。(n = 0,1,2......)
-
传入的实参也可以直接是一个数组。
-
可变参数的本质,其实就是一个数组,因此你也可以把它当数组来用
-
当形参中既含有可变参数,也含有普通的参数,必须确保可变参数在形参列表的最后。
-
方法重载
-
什么是方法重载
-
方法重载:如果同一个类中包含了两个及两个以上方法名相同,方法参数的个数、顺序或者类型不同的方法,则称为方法的重载。
-
-
总结
-
同一个类中,方法名称一致;
-
方法参数的个数、类型或者顺序不一致;
-
有多个方法名相同,编译器只能通过独一无二的参数列表来表示。参数个数、类型、顺序不同均可表示。(顺序不同也可以区分两个方法,但是建议不要这样用,否则将增加代码维护的难度)。
-
与返回值、访问修饰符无关。
-
重载的判断依据调用时能否区分开,故传入参数类型、参数个数都是可以区分,然而返回类型当调用时是不能区分开的(这样应该就可以理解特点2和特点3的原因了吧)。
-
区分重载的方法是只能依据类名和方法的形参列表作为标准,这种正向使用方法的角度进行判断更利于程序员的运用。
-