构造器
构造器的作用:创建对象
说明:如果没有显示定义构造器则系统默认,则系统默认共一个空参构造器
定义格式:权限修饰符 类名(形参列表){}
一旦显示提供构造器系统不在提供默认构造器了
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