7.17. 构造方法总结
一.构造器方法
一个类中方法有两种: 1.一般方法
2.构造方法
1、一般方法:
public 数据类型 方法名{
方法体
}
2、构造器方法
public 类名(参数,...){
//方法
}
实例化对象的格式:
类名 对象名 = new 类名();
类名 对象名 = new 类名(参数值,...);
构造方法的用途:
用来实例化对象的。
Attention:1\构造器方法与一般方法的区别:构造器可以传入参数。
2\构造器方法:1.构造器方法没有任何返回值的定义
2.必须与类名相同
3\构造器可以重载,主要用途:初始化对象某些属性值
4\每个类都会有一个默认的无参构造器,如果重新写构造器,默认的
会被覆盖
二.方法的重载
条件:1.类中,方法同名
2.参数类型、数量和顺序不同
调用:必须根据参数来调用
三.this关键字
1.this 表示当前调用方法的对象
2.this.name = name;//区分属性和参数 ,this指向类对象本身。
this.name 表示对类对象中的name赋值,后面的name是一个变量。
3.this("无名");//调用带一个字符串参数的构造方法
4.this一大用途:可以在构造器中调用自己的另外一个构造器
5.this调用另外一个构造器时,调用的代码必须是第一行且只调用一次
附上小许代码:
//构造时,初始化name,km属性值,符合第5点
public Student(String name,int scro){
this(name,km,0);
}
//构造时,初始化name,km,scro属性值
public Student(String name,String km,int score){
this.name = name;
this.km = km;
this.score = score;
}
四.值传递与引用传递
Java中数据类型分两类:
原始类型(8大基本类型):byte,short,int,long,char,float,double,boolean, 还有String【原始类型改变是只能局部变,不能全部都变,除非用static修饰】;
引用类型(类类型) :类,抽象类,数组,接口【引用类型变的时候,与之相关的数据都会变】。
1.值传递
1、8大基本类型和String类型遵循值传递;
2、如何传值?
//入口函数中
int i = 100;
...
stu.changeInt(i);
//类中
public void changInt(int s){
s++;
}
i是保存在内存的栈里面。
s保存在栈里面用完就会自动销毁
2.引用传递
1、引用类型:类,抽象类,接口,数组
2、如何传递
//入口函数中
Student st1 = new Student();...
st1=st2;
st2=st3;
st3=st1;
最后得到st3 = st2;
VI:1.对象本身存在栈里,指向自己的属性,行为,得到首地址,存在栈中;
2.st1=st2 时,st1指向st2,得到st2的地址,存在st1中
3.st3指向st1时,得到st2地址,就得st3 = st2
/**********************************************************/
练习:回合制游戏:奥特曼和小怪兽要战斗,奥特曼还可以和Boss进行战斗,直到一方的血量为0的时候结束战斗,输出谁胜利了!
思路分析:
分析:
对象:凹凸曼,小怪兽,Boss.
特征:名字,血量,
行为:战斗
重点:奥特曼和小怪兽要战斗,奥特曼还可以和Boss进行战斗
1、用构造器,构造3个角色,初始化他们的名字、血量;
2、分别定义、得到他们的名字,血量。
3、在奥特曼类里用重载的方法重载Fight方法,参数分别为小怪兽和Boss的对象; 在小怪兽和Boss类里面Fight方法只用奥特曼对象做参数
4、定义入口函数。
/**********************Aotoman类************************************/
//定义一个Aotoman类
public class Aotoman{
//Aotoman 名字属性
private String Name ;
//Aotoman 血量属性
private int Blood ;
//构造时,初始化Name,Blood属性
public Aotoman(String n,int b){
Name = n;
Blood = b;
}
//定义一个定义、得到名字的方法
public void setName(String m){
Name = m;
}
public String getName(){
return Name;
}
//定义一个定义、得到血量的方法
public void setBlood(int c){
Blood = c;
}
public int getBlood(){
return Blood;
}
//定义一个打Boss方法
public void Fight(Boss Bo){
Bo.setBlood(Bo.getBlood()-1);
System.out.println(Bo.getName()+"被击中,血量减1");
}
//定义一个打Monster方法
public void Fight(Monster Mo){
Mo.setBlood(Mo.getBlood()-1);
System.out.println(Mo.getName()+"被击中,血量减1");
}
}
/**************************Boss类********************************/
//定义一个Boss类
public class Boss{
//Boss 名字属性
private String Name = "未知姓名";
//Boss 血量属性
private int Blood = 10;
//构造时,初始化Name,Blood属性
public Boss(String n,int b){
Name = n;
Blood = b;
}
//定义一个定义、得到名字的方法
public void setName(String m){
Name = m;
}
public String getName(){
return Name;
}
//定义一个定义、得到血量的方法
public void setBlood(int c){
Blood = c;
}
public int getBlood(){
return Blood;
}
//定义一个打Aotoman方法
public void Fight(Aotoman Ao){
Ao.setBlood(Ao.getBlood()-1);
System.out.println(Ao.getName()+"被击中,血量减1");
}
}
/*************************Monster类*********************************/
//定义一个Monster类
public class Monster{
//Monster 名字属性
private String Name = "未知姓名";
//Monster 血量属性
private int Blood = 10;
//构造时,初始化Name,Blood属性
public Monster(String n,int b){
Name = n;
Blood = b;
}
//定义一个定义、得到名字的方法
public void setName(String m){
Name = m;
}
public String getName(){
return Name;
}
//定义一个定义、得到血量的方法
public void setBlood(int c){
Blood = c;
}
public int getBlood(){
return Blood;
}
//定义一个打Aotoman方法
public void Fight(Aotoman Ao){
Ao.setBlood(Ao.getBlood()-1);
System.out.println(Ao.getName()+"被击中,血量减1");
}
}
/*************************入口函数*********************************/
//定义一个入口函数
public class Manager{
public static void main(String [] args){
Aotoman Ao = new Aotoman("奥特曼",10);
Monster Mo = new Monster("小怪兽",10);
Boss Bo = new Boss("大波士",10);
Ao.Fight(Bo);
Ao.Fight(Mo);
Bo.Fight(Ao);
Mo.Fight(Ao);
for(int i=0;i<5;i++){
Ao.Fight(Bo);
}
for(int j=0;j<9;j++){
Mo.Fight(Ao);
}
if(Ao.getBlood()<=0){
System.out.println(Mo.getName()+"和"+Bo.getName()+"赢了!");
}
else if(Bo.getBlood()<=0||Mo.getBlood()<=0){
System.out.println(Ao.getName()+"赢了!");
}
}
}
/**********************************************************/
遇到的问题: 奥特曼可以跟2个人对战
解决:用重载的方法。重载Fight方法,参数对象不一样而已
心得:很有种感觉自己很蠢~ 本以为重载是很牛B轰轰的~ 发现原来就是这样子的。 就是换个参数而已~ 其他代码跟上次作业是差不多的。
结论:不要把很多东西都看得太复杂~~ 那是无益的。
相关推荐
它可能详细介绍了如何设计和使用构造方法,包括参数化的构造方法、重载构造方法、以及构造方法与this关键字和super关键字的配合使用。 总之,类和对象是面向对象编程的基础,它们帮助我们将复杂的问题抽象为独立的...
总结,Java构造方法在创建和初始化对象时起着至关重要的作用。通过理解并熟练运用构造方法,开发者可以更好地设计和实现类,提高代码的可读性和维护性。在实践中,要灵活运用构造方法的重载、`this`关键字以及与继承...
总结,Java中的构造方法是创建和初始化对象的关键组成部分,它们使得我们可以根据不同的场景灵活地初始化对象,并通过构造方法重载来提供多种初始化方式。理解和掌握构造方法的使用对于编写高质量的Java代码至关重要...
### Java构造方法详解 #### 一、构造方法基础概念 构造方法是Java中一种特殊的方法,主要用于初始化新创建的对象。每个类至少有一个构造方法。如果程序员没有显式地定义构造方法,Java编译器会自动为类添加一个无...
总结,Java子类构造方法的使用涉及到继承、初始化、方法调用等多个概念。正确理解和运用这些知识点对于编写健壮的Java程序至关重要。通过熟练掌握这些内容,开发者可以更好地设计和实现类的层次结构,提高代码的复用...
总结,构造方法是面向对象编程中创建和初始化对象的核心组成部分。理解并熟练掌握构造方法的使用,对于编写出高效、可维护的代码至关重要。在实际编程中,我们需要根据具体需求灵活运用构造方法的各种特性,如构造...
Java构造方法的作用总结 Java构造方法是Java语言中的一种特殊方法,它用于初始化新建的对象。构造方法的主要作用是对类进行初始化,它们的方法名必须与类名相同,并且不可以声明返回类型。下面是关于Java构造方法的...
Java构造方法解析 ...总结起来,Java构造方法是初始化类实例的关键工具,它们允许我们在创建对象时定制初始化过程,确保对象的正确状态。理解并熟练运用构造方法及其特性对于编写高效、可维护的Java代码至关重要。
总结来说,通过Java的构造方法重载,我们可以灵活地创建具有不同初始状态的`Course`对象。`GPACalculator`类则负责根据这些课程的信息计算GPA,展示了面向对象编程在解决实际问题时的便利性。在实际开发中,可能还...
总结来说,理解Java中的构造方法对于学习Java和面向对象编程至关重要。它们负责对象的初始化,允许我们根据需要定制对象的创建过程,并且通过适当的访问权限控制,可以确保构造方法的使用符合设计的意图和安全要求。
在给定的文件中,我们看到了一个名为`Circle`的类,它代表了一个圆,并提供了多种构造方法来创建圆的对象。此外,还提供了设置坐标、半径以及计算周长和面积的方法。下面,我们将深入探讨这个`Circle`类的实现细节...
### Java零基础-构造方法详解 #### 内容概要 本文旨在深入解析Java语言中的构造方法这一核心概念。构造方法是对象初始化的关键步骤,在Java编程中占据着至关重要的地位。通过对构造方法的学习,读者不仅能理解其...
对于构造方法,我们传入`ACC_PUBLIC`访问标志,表示公共构造方法,`"<init>"`作为方法名,`"()V"`作为描述符,表示无参数的构造方法,最后两个参数可以留空,表示没有异常表。 3. **创建MethodVisitor实例**:`...
总结来说,构造方法是初始化对象的重要手段,而自定义构造方法则是为了满足更复杂的初始化需求。在Objective-C中,通过合理的自定义构造方法设计,我们可以创建出具有特定初始化条件的对象,提高代码的可读性和可...
总结,C#的构造方法在创建和初始化对象时起着至关重要的作用。理解并熟练运用构造方法,包括其重载、基类构造方法的调用、静态构造方法等特性,将有助于编写出更高效、更具可维护性的代码。通过观看常老师的视频教程...
总结来说,Java中的默认构造方法是编译器为那些没有显式定义构造方法的类提供的便利。它允许我们在没有初始值的情况下创建对象,并在后续的代码中进行初始化。了解默认构造方法的工作原理对于理解和编写Java代码至关...
标题中的“string类的构造方法”揭示了我们要探讨的核心内容——如何初始化和创建`std::string`对象。`std::string`类不仅在日常编程中频繁使用,而且在很多高级功能如正则表达式、文本处理等方面都有重要应用,因此...
总结来说,本压缩包提供的资料专注于Ext类的构造方法,这涉及到Ext JS的核心编程概念,包括类的继承、构造函数的使用、配置对象、组件生命周期以及代码重用策略。掌握这些知识将有助于开发者更深入地理解和使用Ext ...