头歌实践:Java类和对象之this关键字

1.任务描述

本关任务:编写一个商品结算的小程序。

2.this 关键字

大部分时候,普通方法访问其他方法、成员变量时无需使用 this 前缀,但如果方法里有个局部变量和成员变量同名,但程序又需要在该方法里访问这个被覆盖的成员变量,则必须使用 this 前缀。

接下来我们看个例子:

public class Demo {    
    String name;   
    public Demo(String name) {  
        this.name = name;    
    }
}

我们可以看到成员变量与形参的名称相同,都为 name,那么我们如何区分呢?

在 Java 语言中规定使用 this 关键字来代表本类对象的引用。在上述代码中, this.name 就指的是 Demo 类中的成员变量 name, 而等于号右边的 name 就是形参,这句话的意思是把形参 name 的值赋值给成员变量 name。

接下来我们进行一个测试。

public class Demo {   
    String name = "张三";  
    public Demo(String name) {    
        this.name = name;  
    }    
    public static void main(String[] args) {   
        Demo demo = new Demo("李四"); 
        System.out.println(demo.name);
    }
}

执行结果:

李四

当一个类的属性(成员变量)名与访问该属性的方法参数名相同时,则需要使用 this 关键字来访问类中的属性,以区分类的属性和方法中的参数。

this 关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或实例变量。

来看个例子:

public class Demo {  
    public void  KeyBoard(){        
        System.out.println("准备好了键盘");    }    
    // 定义一个方法,该方法需要借助 KeyBoard 方法   
    public void WritingCode(){      
        // 使用this引用run方法     
        this.KeyBoard();       
        System.out.print("我正在敲代码");  
    }   
    public static void main(String[] args) {    
        Demo demo = new Demo();       
        demo.WritingCode();  
    }
}

执行结果:

准备好了键盘我正在敲代码

在现实世界里,对象的一个方法依赖于另一个方法的情形很常见,例如,吃饭方法依赖于拿筷子方法。这种依赖都是同一个对象两个方法之间的依赖。因此,Java 允许对象的一个成员直接调用另一个成员,可以省略 this 前缀。也就是说,将上面的 run( ) 方法改为如下形式也完全正确。

public void run() {   
    jump();    
    System.out.println("正在执行run方法");
}

大部分时候,一个方法访问该类中定义的其他方法、成员变量时,加不加 this 前缀的效果是完全一样的。

需要注意的是,对于 static 修饰的方法而言,可以使用类来直接调用该方法,如果在 static 修饰的方法中使用 this 关键字,则这个关键字就无法指向合适的对象。所以,static 修饰的方法中不能使用 this 引用。并且 Java 语法规定,静态成员不能直接访问非静态成员。

省略 this 前缀只是一种假象,虽然程序员省略了调用 WritingCode() 方法之前的 this,但实际上这个 this 依然是存在的。

this( ) 用来访问本类的构造方法,括号中可以有参数,如果有参数就是调用指定的有参构造方法。

下面定义一个 Student 类,使用 this( ) 调用构造方法给 name 赋值,Student 类的代码如下所示:

public class Student {    
    String name;    
    // 无参构造方法    
    public Student() {      
        this("张三");    
    }    
    // 有参构造方法    
    public Student(String name) {  
        this.name = name;    
    }   
    public static void main(String[] args) {    
        Student stu = new Student();    
        System.out.println(stu.name);   
    }
}

执行结果:

张三

注意:

  • this( ) 不能在普通方法中使用,只能写在构造方法中;
  • 在构造方法中使用时,必须是第一条语句。

3.编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。


开始你的任务吧,祝你成功!

3.1参考代码

/**
 * 任务:编写一个商品结算的小程序
 * 类名为:Shop
 */

// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/

public class Shop {
    // 定义该商品的两个属性:价格(double)和数量(int)
	private  double price;
	private int total;

    // 将形参的值赋值给成员变量
    public Shop(double price, int total) {
    	this.price=price;
    	this.total=total;
    }

    // 该方法实现计算价钱的功能,将计算结果返回,价钱 = 价格 * 数量
    public double sum() {
    	return price*total;
    }
}

/********** End **********/


任务描述

本关任务:定义一个完整的学生类,该类定义了学生的基本信息。

编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。


开始你的任务吧,祝你成功!

3.2参考代码

/**
 * 任务:定义一个完整的学生类,该类定义了学生的基本信息。
 * 类名为:Student
 */

// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/

// 创建一个名为 Student 的公开类

public class Student {
    // 定义学生的两个属性:姓名(name String)和年龄(age int)
	private String name;
	private int age;
	// 获取学生年龄
    public int getAge() {
        return age;
    }
    // 设置学生的年龄,将形参的值赋值给成员变量
    public void setAge(int age) {
    	this.age=age;
    }
	// 获取学生姓名
    public String getName() {
        return name;
    }
    // 设置学生姓名,将形参的值赋值给成员变量
    public void setName(String name) {
    	this.name=name;
    }

    // 该方法实现输出学生信息的功能。 输出格式:学生姓名:xx,年龄:xx
    public void info() {
    	System.out.println("学生姓名:"+name+",年龄:"+age);
    	
    }
}

/********** End **********/

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
超市收银程序--(JAVA课程设计-2011) 软 件 学 院 课程设计报告书 课程名称 面向对象程序设计 设计题目 超市收银程序 专业班级 学 号 姓 名 "1 设计时间 " "2011.6.6-2011.06.10 " "2 设计目的 " "《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该" "课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序" "设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方" "法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能" "力。 " "3设计任务 " "超市收银程序 " "(1)使用图形用户界面实现。 " "(2)由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等。从数据库中取 " "出相关商品的价格信息,再把这些信息返回给收银台,计算出该顾客所购商品的总价" "格。 " "(3)每天营业结束把该收银台的销售总额进行统计汇总(要求包括商品种类、数量、 " "销售总额、结账人次等信息,其余可自行丰富)并存储在数据库中。 " "(4)所有持卡顾客的消费商品情况存储到文件以供查询。 " "(5)对没有卡的消费情况不记录该顾客的消费情况等个人信息。如果一个未持卡顾客 " "一次购物满200元,结完账后系统提示可为其发放一张会员卡。 " "4 设计内容 " "4.1 概要设计 " "4.1.1 体系结构设计 " " " " " " " " " "4.2功能模块设计 " "4.2.1 功能说明 " "4.2.1.1消费者消费 " "普通消费者消费在超市收银的首界面显示,输入消费者购买商品的编号以及数量,算" "出消费总金额,如果消费者单次消费的金额达到了200元,系统提示此消费者可以成 " "为会员。 会员消费在首界面输入会员卡号,然后显示会员姓名。 " "4.2.1.2账目结算 " "在本窗口中显示超市在该结账机上的当天的销售总额(包括会员消费总额以及非会员 " "消费总额),同时还显示当天在该机上的出售的商品的情况。 " "4.2.1.3会员管理 " "如果消费者单次消费的金额达到了200元,系统提示此消费者可以成为会员,并且录 " "入会员基本信息。 " "4.2.1.4商品管理 " "输入商品编号会在面板内提示相应的价格。 " "4.3 程序运行与调试 " "4.3.1 运行界面 " " " "主界面 " " " "确定会员以及商品价格 " " " "消费总额满200发会员卡一张 总结全天账单 " " " " " "4.3.2 程序代码及解释 " "import java.awt.*; " "import java.awt.event.*; " "import javax.swing.*; " "class shangpin{ " "String SId; " "String Smane; " "int jiage; " "public shangpin(String a,String b,int c){ " "SId=a; " "Smane=b; " "jiage=c; " "} " "} " "class huiyuan{ " "String HId; " "String Hname; " "public huiyuan(String a,String b){ " "HId=a; " "Hname=b; " "} " "} " "public class chaoshi extends JFrame{ " "static int key=0; //会员 " "static int sum1=0; //总消费 " "static int sum2=0; //当天合计 " "static int huiyuansum=0; //会员人数 " "static int Spinsum1=0; //商品1合计 " "static int Spinsum2=0; //商品2合计 " "static int Spinsum3=0; //商品3合计 " "static int Spinsum4=0; //商品4合计 " "static int Spinsum5=0; //商品5合计 " "public static void main(String[] agrs){ " "JFrame frame =new JFrame("超市"); " "frame.setSize(400,250); " "frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); " "Container c=frame.getContentPane(); " "c.add(

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小园豆知识日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值