Java基础之五
构造器
构造器的作用:创建对象
说明:如果没有显示定义构造器则系统默认,则系统默认共一个空参构造器
定义格式:权限修饰符 类名(形参列表){}
一旦显示提供构造器系统不在提供默认构造器了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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 " ); } } |
测试
1 2 3 4 5 6 | gcfhjnk.... 吃饭 xuexi tamcat Process finished with exit code 0 |
实例2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 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()); } } |
测试
1 2 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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; } } |
测试
1 2 | 6 tomcat |
构造器this关键字的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 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 " ); } } |
测试
1 2 | 吃饭 gcfhjnk.... |
实例2
类1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | 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 ; } } } |
调用
1 2 3 4 5 6 7 8 9 10 | 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); } } |
测试
1 2 3 4 5 | 先多谈一下恋爱 我想嫁给tomcat 我想娶ami Process finished with exit code 0 |
草都可以从石头缝隙中长出来更可况你呢
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏