构造器的作用
1.创建对象
People p = new People();
p指向People类的空参构造器
2.初始化对象信息
当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码。这就好像我们规定每个“人”都有姓名和年龄这两个属性,我们就可以在“人”的构造方法中加入“姓名”和“年龄”的程序代码,于是每个“人”一出生就会有一个“姓名”和“年龄”,程序就不必再在每个人刚出生时一个一个地告诉他们的“姓名”和“年龄”了。
class People{
//属性
String name;
int age;
Public People(String name ,int age){
name=name;
age =age;
}
构造器注意说明
1 如果没有显式的定义类的构造器,系统则会默认提供一个空参构造器
2 语法格式:
权限修饰符 类名( 形参列表) {
语句
}
如:
public student(int age,String name){
System.out.println("我是个学生");
}
3 一个类中定义的多个构造器,彼此构成重载
上面声明了四个带参数的构造器,他们之间的关系为重载
4 一旦我们定义了显示的构造器,系统则不会再默认提供空参构造器
5 一个类中,至少会有一个构造器
toString()方法
将对象转成字符串,方便打印
在输出一个对象的时候,默认就是调用这个对象的toString方法
如果项目里需要输出一个对象的时候,就可以重写toString方法。
举例:
public class Fish {
private int money;
private String type;
public Fish(int money, String type) {
super();
this.money = money;
this.type = type;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
public class I {
public static void main(String[] args) {
Fish fish = new Fish(12, "鲤鱼");
System.out.println(fish);
}
}
当Fish类没有重写toString()方法时,打印的是该方法返回的是"类名@hashCode值"形式的字符串
当重写了toString()后:
public class Fish {
private int money;
private String type;
public Fish(int money, String type) {
super();
this.money = money;
this.type = type;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return "Fish money= " + money + ", type=" + type + "。";
}
}
就可以打印出
重写了toString()这个方法的用途就是为了方便操作,在文件操作里面可用可不用。
比如在刚刚例子中,我把主方法修改一下,依旧可以达到重写了toString()的效果
public class I {
public static void main(String[] args) {
Fish fish = new Fish(12, "鲤鱼");
System.out.println(fish.getMoney()+" "+fish.getType());
}
}
get、set方法
当我们对类中的域变量进行封闭操作,即用private来修饰他们时,其他类则不能对该变量访问。而其他类想要操作这些域变量时,我们可以通过两种方法:
第一种即通过public方式的构造器(或称构造函数),对象一实例化就对该变量赋值。
比如:
public class Fish {
private int money;
private String type;
public Fish(int money, String type) {
this.money = money;
this.type = type;
}
@Override
public String toString() {
return "Fish money= " + money + ", type=" + type + "。";
}
}
public class I {
public static void main(String[] args) {
Fish fish = new Fish(12,"鲤鱼");
System.out.println(fish);
}
}
第二种就是通过上面提到的set和get方法
通过set方法来设置属性,get方法来获取属性。
比如:
public class Fish {
private int money;
private String type;
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
public class I {
public static void main(String[] args) {
Fish fish = new Fish();
fish.setMoney(12);
fish.setType("鲤鱼");
System.out.println(fish.getMoney() + " " + fish.getType());
}
}
通过定义setMoney()、getMoney()、setType()、getType()这四个方法,来实现对Money和Type的操作。这样一来,我不用直接对Fish类中的域变量操作,而是通过set和get方法间接地操作这些变量,这样就能提高域变量的安全性,同时又保证了域变量的封装型
参考:
https://blog.csdn.net/shero1604/article/details/77882740