1、构造方法
/**
* 在我们去创建对象的时候,会用到一个特殊的方法,
* 这个方法叫做构造方法、构造器。
*
* 怎么去创建一个构造方法呢?
* public 构造方法名(形参){}
*
* 注意:1、构造方法没有返回值
* 2、构造方法名必须和类名一致,包括大小写
*
* 作用:
* 1、创建对象 ,new的时候调用了构造方法
* 2、在创建对象的同时,我们可以调用有参的构造方法直接对属性
* 进行赋值。
*
* 构造方法是一个特殊的方法,所以它可以进行方法重载。那么重载
* 构造方法是为了什么呢?
* 在创建对象的同时,我们可以调用有参的构造方法直接对属性进行赋值
*
* 注意:
* 如果没有显示得定义构造方法,系统会默认得提供一个无参的构造方法
* 如果显示得定义了一个有参构造方法,系统不会提供无参的构造方法,所以我们必须手动
* 得创建一个无参的构造方法
*
*
*
*
*/
//创建一个构造方法
public School() {
System.out.println("无参构造方法执行了");
}
public School(String name1) {
name=name1;
}
//第二种方式 使用构造方法对属性进行赋值(另外一种是用set方法进行赋值)
public School(String name1,String address1) {
name=name1;
address=address1;
}
//创建一个学校对象
School sc=new School();//new后面就是调用了构造方法
System.out.println("使用set方法进行赋值===========");
sc.setName("国际希望小学");
sc.setAddress("山东济宁");
System.out.println("校名:"+sc.getName()+",地址:"+sc.getAddress());
System.out.println("使用有参构造方法进行赋值===========");
//new对象的同时给属性赋值,省去了set方法的麻烦,针对多个属性同时赋值
School sc1=new School("济院","山东济宁");
//如果向把济院进行更改的话,那么建议使用set方法
sc1.setName("济宁大学");
System.out.println("校名为:"+sc1.getName()+",校址:"+sc1.getAddress());
//创建一个学生对象
Student stu=new Student();//new的就是一个构造方法
//通过对象名.属性进行赋值
stu.stuNo=10200;
stu.stuName="张三";
stu.setAge(20);
//stu.age=-18;
/**
* 还是可以通过 对象名.属性名的方式进行赋值,那如何不让它 通过这种方式进行赋值呢?
* 可以把类中的成员变量私有化 private
*/
//我想直接调用属性,输出age属性值,但是属性私有化后就不能直接调用了
// System.out.println(stu.age);
//可以在类中定义一个方法来单独获取属性值
stu.getAge();
System.out.println(stu.getAge());
//通过 对象名.方法名 调用方法
stu.desc();
2、封装性
/**
1、面向对象的特征:封装性
当我创建完对象后,我如果直接通过 “对象名.属性名 ” 的方式给属性
赋值的话,可能会出现不符合实际情况的赋值。
所以,我们不考虑使用 “对象名.属性名 ”的方式进行赋值,而是通过
“对象名.方法名” 的方式进行赋值,因为我们可以在方法里面加上
大量的业务逻辑,对属性值进行限制。
2、 怎么用封装呢?
- 1、将属性私有化(此时就不能通过 对象名.属性名的方式进行调用)
- 2、提供公用的(get and set)方法实现属性的取值和赋值
*/
//private :私有的,用private修饰的属性和方法只能在当前类的内部去调用
private int age;//年龄
//给年龄属性进行赋值
public void setAge(int age1) {
//如果年龄大于等于0岁,小于等于150岁
if(age1>=0&&age1<=150) {
age=age1;
}else {
System.out.println("输入不合法");
}
}
//定义一个方法来获取年龄的值
public int getAge() {
return age;
}
//创建一个学生对象
Student stu=new Student();//new的就是一个构造方法
//可以在类中定义一个方法来单独获取属性值
stu.getAge();
System.out.println(stu.getAge());
3、this关键字
/**
* 成员变量和局部变量出现重名时,方法会根据“就近原则”而使用局部变量的值
* 如果想区分成员变量和局部变量,我们可以使用this关键字。
*
* 格式:
* this.成员变量
*
* 什么是this?
* 1、this代表当前使用的对象或者正在创建的对象,谁调用了这个方法谁就是this
* 2、this可以修饰成员变量、成员方法、构造方法
* 3.this(“形参”)来调用本类中其他的构造方法
* 注意,必须放在首行。
* 如果一个类里面有n个构造方法,那么构造方法内部最多有n-1个this()
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void sayHello(String name) {
System.out.println(this.name+"对"+name+"说,吃饭了没?");
eat();//相当于this.eat();
}
//吃饭
public void eat() {
System.out.println("人吃饭");
age=12;//相当于this.age=12;
}