构造器
构造器的作用:创建对象
说明:如果没有显示定义构造器则系统默认,则系统默认共一个空参构造器
定义格式:权限修饰符 类名(形参列表){}
一旦显示提供构造器系统不在提供默认构造器了
package com.chenxi1.com; /*构造器(constructor) 创建对象 */ public class PersonTest { public static void main(String[] args){ //创建对象:new+构造器 person person1; person1 = new person(); person1.ead(); person1.study(); person person2=new person("tamcat"); System.out.println(person2.name); } } class person{ //属性 String name; int age; //构造器 public person(){ System.out.println("gcfhjnk...."); } public person(String a){ name=a; } //方法 public void ead(){ System.out.println("吃饭"); } public void study(){ System.out.println("xuexi "); } }
测试
gcfhjnk.... 吃饭 xuexi tamcat Process finished with exit code 0
实例2
package com.chenxi.exer; public class TriAngle { private double base; private double height; public TriAngle(){ } public TriAngle(double a){ base=a; } // public TriAngle(double b){ // base=b; // } public TriAngle(double a,double b){ base=a; height=b; } public void setBase(double a){ base=a; } public void setHeight(double b){ height=b; } public double getBase() { return base; } public double getHeight() { return height; } } package com.chenxi.exer; public class TriAngleTest { public static void main(String[] args){ TriAngle san = new TriAngle(5.0,9.7); System.out.println(san.getBase()); san.setBase(8.7); System.out.println(san.getBase()); } }
测试
5.0 8.7
属性赋值
1.默认初始化——————>显示赋值——————>构造器初始化————————>通过“对象.方法"或者对象.属性
JavaBean的概念
JavaBean是一种Java语言写成的可重用组件。
所谓javaBean,是指符合如下标准的Java类: 类是公共的 有一个无参的公共的构造器 有属性,且有对应的get、set方法
用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以 用Java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP 页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用 户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关 心任何改变。
关键字this 的使用
在Java中,this关键字比较难理解,它的作用和其词义很接近。
它在方法内部使用,即这个方法所属对象的引用;
它在构造器内部使用,表示该构造器正在初始化的对象。
this 可以调用类的属性、方法和构造器
当前对象
什么时候使用this关键字呢?
当在方法内需要用到调用该方法的对象时,就用this。 具体的:我们可以用this来区分属性和局部变量。 比如:this.name = name;
this 关键字得到使用
1.this 可以修饰:属性、方法、构造器
2.this 修饰属性和方法
this理解为当前对象或者当前正在创建的对象
在类方法中我们使用“this.属性”或者“this.方法”的方式,调用当前对象属性或方法,但是通常情况下。我们都选择省略“this”。特殊情况下如果方法堵塞形参和类的属性同名时。我们必须显示的使用“this.属性”的方式,表示此变量是属性,而非形参
在类的构造器中,我们可以使用“this.属性”或“this.方法”的方式,调用当前正在创建的对象属性或者方法。但是通常情况下,我们都选择省略“this.”。特殊情况,如果构造器的形参和类的属性同名时,我们必须显示使用“this.变量”的方式,表示此变量是属性而非形参
3.this关键字修饰或调用构造器
在类的构造器中,可以显示使用this(形参列表)方式,调本类中指定的其他构造器
构造器中不能“this(形参列表)”方式自己调自己
如果有N个构造器最多能调n-1个构造器中使用this关键字调其他构造器
规定“this(形参列表)”必须声明在当前构造器的首行
构造器内部不能同时调多个构造器
实例属性的this
package com.com.chenxi3.java; public class PresonTest { public static void main(String[] args ){ preson preson1=new preson(); preson1.setAge(6); preson1.setName("tomcat"); System.out.println(preson1.getAge()); System.out.println(preson1.getName()); } } class preson{ private String name; private int age; public void setName(String name){ this.name = name;//this关键字表示当前对象 } public void setAge(int age) { this.age = age; } public String getName(){ return name; } public int getAge(){ return age; } }
测试
6 tomcat
构造器this关键字的使用
package com.chenxi1.com; /*构造器(constructor) 创建对象 */ public class PersonTest { public static void main(String[] args){ //创建对象:new+构造器 // person person1; // person1 = new person(); // person1.ead(); // person1.study(); // person person2=new person("tamcat"); // System.out.println(person2.name); person person3=new person("nginx",8);//创建对象 // System.out.println(person3.name); } } class person{ //private static final Object String = ; //属性 String name; int age; //构造器 public person(){ this.ead(); System.out.println("gcfhjnk...."); } public person(String a){ this();//表示调空参构造器 name=a; } public person(String c,int b){ this(c);//调有参数的构造器; age=b; } //方法 public void ead(){ System.out.println("吃饭"); } public void study(){ System.out.println("xuexi "); } }
测试
吃饭 gcfhjnk....
实例2
类1
package com.chenxi1.com; public class Boy { private String name; private int age; public Boy(){ } public Boy(String name,int age){ this.setAge(age); this.setName(name); } public void setName(String name){ this.name = name; } public void setAge(int age){ this.age = age; } public void set(int age,String name){ this.setName(name); this.setAge(age); } public void marry(Girl girl){ System.out.println("我想娶"+girl.getName()); } public void shout(){ if (this.age>=22){ System.out.println("可以合法登记结婚了"); }else { System.out.println("先多谈一下恋爱"); } } public String getName() { // System.out.println(this.name); return this.name; } }
类2
package com.chenxi1.com; public class Girl { private String name; private int age; public Girl(){ } public Girl(String name,int age){ this.name=name; this.age=age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } public void marry(Boy boy){ System.out.println("我想嫁给"+boy.getName()); boy.marry(this); } public int compare(Girl girl){ if (this.age>girl.age){ return 1; }else if (this.age<girl.age){ return -1; }else { return 0; } } }
调用
package com.chenxi1.com; public class BoyGirlTest { public static void main(String[] arge){ Boy boy= new Boy("tomcat",21); Girl girl= new Girl("ami",22); boy.shout(); girl.marry(boy); } }
测试
先多谈一下恋爱 我想嫁给tomcat 我想娶ami Process finished with exit code 0