面向对象的(构造方法的概念和使用)
A:构造方法概述和作用
* 给对象的数据(属性)进行初始化
* B:构造方法格式特点
* a:方法名与类名相同(大小也要与类名一致)
* b:没有返回值类型,连void都没有
* c:没有具体的返回值return;
classConstructor_Demo
{public static voidmain(String[] args)
{
Person p= new Person();//构造方法在类创建时初始化
}
}classPerson
{privateString name;private intage;public Person(){ //构造方法与方法名一致
name = "张三";
age=23;
System.out.println(name+"...."+age);return;//构造可以return,但是没有任何类型,所以直接一个“;”结束
}
}
运行结果:
面向对象(构造方法的重载及注意事项)
A:案例演示
* 构造方法的重载
* 重载:方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表
* B:构造方法注意事项
* a:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
* b:如果我们给出了构造方法,系统将不再提供默认的无参构造方法。
* 注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法
A:
运行代码:
classConstructor_Demo1
{public static voidmain(String[] args)
{
Person p1= new Person();//无参构造
p1.show();
Person p2= new Person("张三",23);//有参构造
p2.show();
}
}classPerson
{privateString name;private intage;public Person(){ //构造方法与方法名一致
System.out.println("这是无参构造");
}public Person(String name,intage){this.name =name;this.age =age;
System.out.println("这是有参构造");
}public voidshow(){
System.out.println(name+"...."+age);
}
}
运行结果:
内存执行图:
B:(a)如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
classConstructor_Demo1
{public static voidmain(String[] args)
{
Person p1= new Person();//无参构造
p1.show();/*Person p2 = new Person("张三",23);//有参构造
p2.show();*/}
}classPerson
{privateString name;private intage;/*public Person(){ //构造方法与方法名一致
System.out.println("这是无参构造");
}*/
/*public Person(String name,int age){
this.name = name;
this.age = age;
System.out.println("这是有参构造");
}*/
public voidshow(){
System.out.println(name+"...."+age);
}
}
运行结果:
在代码上我注释掉了自己创建的有参构造方法和无参构造方法,依旧出现和无参构造一样的结果,这就是因为系统在我们没有创建构造方法时,为我们自动创建了空参构造方法。
B:(b)如果我们给出了构造方法,系统将不再提供默认的无参构造方法
我注释掉自己创建的无参构造方法,只留下有参构造方法,在new p1时系统会报错,因为当自己创建构造方法时系统将不会自动创建空参构造方法,所有会报错。
运行代码:
classConstructor_Demo1
{public static voidmain(String[] args)
{
Person p1= new Person();//无参构造
p1.show();/*Person p2 = new Person("张三",23);//有参构造
p2.show();*/}
}classPerson
{privateString name;private intage;/*public Person(){ //构造方法与方法名一致
System.out.println("这是无参构造");
}*/
public Person(String name,intage){this.name =name;this.age =age;
System.out.println("这是有参构造");
}public voidshow(){
System.out.println(name+"...."+age);
}
}
报错截图:
面向对象(给成员变量赋值的两种方式的区别)
* A:构造方法
* 给对象中属性进行初始化
* B:setXxx()方法
* 修改属性值
运行代码:
classConstructor_Demo2
{public static voidmain(String[] args)
{
Person p= new Person("张三",23);//有参构造
p.show();
p.setName("李四");
p.setAge(24);
p.show();
}
}classPerson
{private String name; //姓名
private int age; //年龄
public Person(String name , int age){ //有参构造方法
this.name =name;this.age =age;
System.out.println("这是有参构造");
}public void setName(String name){ //设置姓名
this.name =name;
}public void setAge(int ae){ //设置年龄
this.age =age;
}public voidshow(){
System.out.println(name+"....."+age);
}
}
运行结果:
面向对象(学生类的代码及测试)(掌握)
* A:案例演示
* 学生类:
* 成员变量:
* name,age
* 构造方法:
* 无参,带两个参
* 成员方法:
* getXxx()/setXxx()
* show():输出该类的所有成员变量值
* B:给成员变量赋值:
* a:setXxx()方法
* b:构造方法
* C:输出成员变量值的方式:
* a:通过getXxx()分别获取然后拼接
* b:通过调用show()方法搞定
运行代码
classStudent_Demo
{public static voidmain(String[] args)
{
Student s= new Student("张三",23);//有参构造
s.show();
s.setName("李四");
s.setAge(34);
s.show();
}
}classStudent
{private String name; //姓名
private int age; //年龄
publicStudent(){
System.out.println("这是无参构造");
}public Student(String name , int age){ //有参构造方法
this.name =name;this.age =age;
System.out.println("这是有参构造");
}public void setName(String name){ //设置姓名
this.name =name;
}public void setAge(int age){ //设置年龄
this.age =age;
}public String getName(){ //返回姓名
returnname;
}public int getAge(){ //返回年龄
returnage;
}public voidshow(){
System.out.println(getName()+"....."+getAge());
}
}
运行结果
面向对象(手机类的代码及测试)(掌握)
* A:案例演示
* 模仿学生类,完成手机类代码
运行代码
classPhone_Demo
{public static voidmain(String[] args)
{
Phone p= new Phone("诺基亚",110);
p.show();
p.setName("黑莓");
p.setNumber(120);
System.out.println(p.getName()+"...."+p.getNumber());
}
}classPhone
{private String name; //姓名
private int number; //号码
publicPhone(){
System.out.println("无参构造方法");
}public Phone(String name , int number){ //有参构造方法
this.name =name;this.number =number;
System.out.println("这是有参构造");
}public void setName(String name){ //设置型号
this.name =name;
}public void setNumber(int number){ //设置号码
this.number =number;
}public String getName(){ //返回型号
returnname;
}public int getNumber(){ //返回号码
returnnumber;
}public voidshow(){
System.out.println(name+"....."+number);
}
}
运行结果
面向对象(static关键字及内存图)(了解)
* A:案例演示
* 通过一个案例引入static关键字。
* 人类:Person。每个人都有国籍,中国。
country不设置static关键字之前的代码:
classstatic_Demo
{public static voidmain(String[] args)
{
Person p1= newPerson();
p1.name= "李四";
p1.country= "中国";
p1.show();
Person p2= newPerson();
p2.name="王五";
p2.country= "中国";
p2.show();
}
}classPerson
{
String name;//姓名
String country; //国籍
publicPerson(){
name="张三";
country="中国";
}public voidshow(){
System.out.println(name+"....."+country);
}
}
country不设置static关键字之前的内存图:
country设置static关键字之后的代码:
classstatic_Demo
{public static voidmain(String[] args)
{
Person p1= newPerson();
p1.name= "李四";
p1.show();
Person p2= newPerson();
p2.name="王五";
p2.show();
}
}classPerson
{
String name;//姓名
static String country; //国籍
publicPerson(){
name="张三";
country="中国";
}public voidshow(){
System.out.println(name+"....."+country);
}
}
country设置static关键字之后的内存图
static关键字的特点
* a:随着类的加载而加载
* b:优先于对象存在
* c:被类的所有对象共享
* 举例:咱们班级的学生应该共用同一个班级编号。
* 其实这个特点也是在告诉我们什么时候使用静态?
* 如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
* 举例:
* 饮水机(用静态修饰)
* 水杯(不能用静态修饰)
* 共性用静态,特性用非静态
* d:可以通过类名调用
* 其实它本身也可以通过对象名调用。
* 推荐使用类名调用。
* 静态修饰的内容一般我们称其为:与类相关的,类成员