构造函数:
- 构造函数是类中的一种特殊函数,构造函数的名字与类的名字相同,而且没有类型。
- 构造函数负责对类对象的特定属性初始化。【比如每一只狗对象都有不同的名字,而狗类是一个模板,是没有名字的,而构造函数可以做到给狗定义名字。】
- 类中可以有多个构造函数,它们以函数重载的方式存在。
- 构造函数是没有类型的,是直接以“ 类名(){}” 作为函数。
- 类中会默认有一个无参数的构造函数,如果定义了其他构造函数,那么这个默认的无参构造函数就会不默认存在了。
class Dog{ String name; Dog(){ this.name="旺财"; } Dog(String name){ this.name=name; } } public class Init_usage { public static void main(String args[]) { Dog d3=new Dog(); Dog d4=new Dog("小菜"); System.out.println(d3.name); System.out.println(d4.name); } }
补充:
封装与私有:
- 类的封装的一个体现是变量和函数的私有化
- 封装的准则:
- 将不需要对外提供的内容都隐藏起来。
- 将属性都隐藏,提供公共方法对其访问。
- 私有化使类的非公共属性隐藏了起来,比如一个“人类”对象有自己的资产,一般只有自己才能知道自己有多少资产,并且不想直接给别人看到,但如果别人问题,还是会告诉别人的(隐藏了自己的资产情况,但是自己能够使用方法获得结果,这个方法是开放的,调用就是相当于别人问)。
- 可以使用private来使变量和函数私有化,这样之后不能直接使用 对象.变量 或 对象.函数 来调用,只有对象内部的方法才能调用
- 将变量或方法私有化之后,一般对外提供getXXX,setXXX方法进行访问,提高数据访问的安全性。
class Man{ private int money; String name; Man(String name,int money){ this.name=name; this.money=money; } int getmoney(){ return money; } void setMoney(int money){ this.money=money; } } public class Private_usage { public static void main(String[] args) { Man m=new Man("lilei",2000); System.out.println(m.name);//lilei // System.out.println(m.money);//报错的,因为私有了,不能访问 // System.out.println(m.wife);//报错的,因为私有了,不能访问 System.out.println(m.getmoney()); //2000 m.setMoney(6000); System.out.println(m.getmoney());//6000 } }
this关键字:
- this代表当前对象(调用函数时代表当前调用该函数的对象),比如在类中可以使用this.XXX来调用对象自己的变量或方法。
- 当局部变量和成员变量同名时,可以用this关键字区分,this.XXX代表使用对象自身的变量
-
类中的成员变量默认是带有this前缀的,但遇到同名时必须加以区分。
-
this加上参数列表(this(参数))的方式就是访问本类中符合该参数的构造函数
-
用于调用构造函数的this语句必须放在第一行,因为初始化动作要优先执行
class Person{ String name; int age; Person(String name,int age){ this.name=name; this.age=age; } void hello() { this.sysprint(); // sysprint(); } void sysprint() { System.out.println("hello world!"); } } public class This_usage { public static void main(String args[]) { Person p1=new Person("lilei",18); p1.hello();//hello world! } }