03-单类定义(构造方法与容器使用)

构造方法与容器存储对象
1.构造方法
1.1构造方法概述
专门在创建对象时使用的方法
我们知道,当创建一个对象的时候,对象的成员变量是有默认值的.如果我们想在创建对象的时直接对成员变量设置值就可以使用构造方法去做了
1.2构造方法定义格式及使用
定义:
一般定义在其他方法前,成员变量后。
定义格式:没有返回值类型定义,方法名与类名相同,参数依据需求而定。
public 类名(参数类型 参数1,参数类型 参数2…){
//自定义初始化逻辑
}

构造方法可以重载。
如:

public class Person{

	private String name;
	
//两个构造方法为重载关系
//空参的构造方法
	public Person() {} 
//带参的构造方法,创建对象后,成员变量就已经赋值完毕了
public Person(String name) { 
		this.name = name;
		
} 

//get/set方法
}

调用构造
构造方法的调用就是普通创建对象的过程。
即new Person()就是调用构造方法,new为固定关键字,Person()是被调用的构造方法。

public class Test{
	public static void main(String[] args) {
		//空参构造方法创建的对象,成员变量均为默认值,与数组默认值规律相同
		Person p = new Person();
		String name = p.getName();
		System.out.println(name); //打印结果为null
		//带参的构造方法,创建对象后,成员变量均被赋值了
		Person p2 = new Person(“李雷”);
		String name2 = p2.getName();
		System.out.println(name2); //打印结果为李雷
	}
}

1.3不同构造方法的相互调用
一个类可以创建多个构造方法,不同的构造方法之间可以相互调用.
在构造方法中调用其他构造方法的格式:
this(参数列表);

public class Person {

	private String name;
	private int age;
	private String home;
	
	public Person(){
		System.out.println("无参的构造方法执行了  ");
	}
	public Person(String name){
		this.name = name;
		System.out.println("有参方法构造方法Person(String name) 已经执行");
	}
	public Person(String name, int age) {
		this(name);//调用一个参数的构造方法
		this.age = age;
	}
	public Person(String name,int age,String home){
		this(name,age);//调用两个参数的构造方法
		this.home = home;
	}
}

注意:构造方法之间互相调用,调用的格式需要写在构造方法第一行
1.4默认构造方法
构造方法是必须存在的,如果没有手动给出构造方法,Java会自动补齐一个空参的构造方法,这个过程我们是看不到的。
如果手动给出了任何构造方法,java则不会再自动补齐构造方法。
建议:使用如下习惯性的写法
1.5构造方法的习惯性定义
学习阶段一般我们会定义至少两个构造方法:空参构造与带参数的构造。
空参构造是习惯上存在的。后期一些情况要求我们必须提供空参构造。
带参的构造方法通常是为了给属性赋值的。
构造方法在定义时,还会完成一些初始化成员变量以外的动作。
2.标准类的定义
到目前为止,我们已经可以完成一个完整类的定义了。
定义内容包括:
使用private修饰的成员变量
空参构造方法
带参构造方法
普通成员方法(可选)
对应成员变量的getters和setters
一个标准Person类的定义:

public class Person{
		//成员变量
		private int age;
		private String name;
		//构造方法
		public Person(){}
		public Person(String name,int age) {
			this.name = name;
			this.age = age;
		}
		//普通方法
          public void method() {
                System.out.println(“一个普通的方法”);
}
		//getters和setters 
         public void setAge(int age) {
			this.age = age;
}

public int getAge() {
	return age;
}

         public void setName(String name) {
			this.name = name;
}

public String getName() {
	return name;
}
}

3.容器存储自定义类型对象
3.1对象数组的案例
创建一个学生数组,存储三个学生对象并遍历

public class Student {
	private String name;
	private int age;
	public Student() {
		
	}
	public Student(String name, int age) {
		this.name = name;
		this.age = 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;
	}
}
public class Demo01Array {
	public static void main(String[] args) {
		//创建学生数组
		Student[] students = new Student[3];
		
		//创建学生对象
		Student s1 = new Student("曹操",40);
		Student s2 = new Student("刘备",35);
		Student s3 = new Student("孙权",30);
		
		//把学生对象作为元素赋值给学生数组
		students[0] = s1;
		students[1] = s2;
		students[2] = s3;
		
		//遍历学生数组
		for(int x=0; x<students.length; x++) {
			Student s = students[x];
			//System.out.println(s);
			System.out.println(s.getName()+"---"+s.getAge());
		}
	}
}

3.2集合存储
更为高级的ArrayList集合同样可以存储自定义数据类型对象,且只能存储引用数据类型对象,不能存储基本数据类型。这也是指定ArrayList集合存储元素时,将int指定为Integer类型的原因。

发布了186 篇原创文章 · 获赞 379 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/qq_45765882/article/details/104578912