【新手学java】关于this的种种问题

苦苦的潜行者 苦苦的潜行者 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
话说各种教程上娴熟的运用this..真tm神奇.
我是越看越不懂,越懂越懵懂.

直接上代码,求分析求解释...


class Person{
String name;
int age;
Person(){
name="noname";
age=1;
}
Person(String name){
this();
this.name=name;
}
Person(int age){
this();
this.age=age;
}
Person(String name,int age){
this.name=name;
this.age=age;
}
void print(){
System.out.println ("我的名字是"+name+",年龄是"+age);
}
}
class Test{
public static void main(String [ ] args){
Person p1=new Person();
p1.print();
Person p2=new Person("小明");
p2.print();
Person p3=new Person(10);
p3.print();
Person p4=new Person("小芳",11);
p4.print();
}
}


教程上说:
注意在使用this 关键字来重载构造函数时,this 必须是构造函数的第一个语句,且一个构造函数中只能出现一次。

我就试验了一下.
class Person{
String name="noname";
int age=1; //这里变成初始化
/*
Person(){
name="noname";
age=1;
}*/
Person(String name){
this(); //运行时这里就开始报错,说找不到符号,构造函数Person()
this.name=name;
}
...........


但是我如果改成
class Person{
String name="noname";
int age=1; //这里变成初始化

Person(){
//name="noname";
//age=1;
}
Person(String name){
this();
this.name=name;
}
...........


这样就不出错.

难道必须要有一个不带参数的构造函数Person(){}吗
不是说,系统默认就有一个不带参数,不做任何操作的构造函数么?

如果这么说的话,
还有一道例题,关于this的用法,这this又是一个什么用法呢(代码略显冗长,就是设置时间的)
// Time3.java类的定义
public class Time3 {
private int hour; // 0 - 23
private int minute; // 0 - 59
private int second; // 0 - 59

// Time3 constructor initializes each instance variable
// to zero. Ensures that Time object starts in a
// consistent state.

public Time3()
{
this.setTime( 0, 0, 0 ); //这个this指向何方,如果上面教程的话说this指向第一个构造函数,但是这个就是this就是本身了public Time3(){}了
}
// Time3 constructor: hour supplied, minute and second
// defaulted to 0
public Time3( int h )
{
this.setTime( h, 0, 0 );
}
// Time3 constructor: hour and minute supplied, second
// defaulted to 0
public Time3( int h, int m )
{
this.setTime( h, m, 0 );
}
public Time3( int h, int m, int s )
{
this.setTime( h, m, s );
}
// Time3 constructor: another Time3 object supplied
public Time3( Time3 time )
{
this.setTime( time.getHour(), time.getMinute(),
time.getSecond() );
}
// Set Methods
// set a new Time value using universal time
public Time3 setTime( int hour, int minute, int second )
{
this.setHour( hour ); // set hour
this.setMinute( minute ); // set minute
this.setSecond( second ); // set second
return this; // enables chaining
}
// validate and set hour
public Time3 setHour( int hour )
{
this.hour = ( hour >= 0 && hour < 24 ? hour : 0 );
return this; // enables chaining
}
public Time3 setMinute( int minute )
{
this.minute = ( minute >= 0 && minute < 60 ) ? minute : 0;
return this; // enables chaining
}
// validate and set second
public Time3 setSecond( int second )
{
this.second = ( second >= 0 && second < 60 ) ? second : 0;
return this; // enables chaining
}
// get value of hour
public int getHour() { return this.hour; }

// get value of minute
public int getMinute() { return this.minute; }
// get value of second
public int getSecond() { return this.second; }
// convert to String in universal-time format
public String toUniversalString()
{
return hour + ":" + minute + ":" + second ;
}
// convert to String in standard-time format
public String toString()
{
return ((hour == 12 || hour == 0) ? 12 : hour % 12 ) +":" + minute+":" + second + ( hour < 12 ? " AM" : " PM" );
}
public static void main( String args[] )
{
Time3 t1, t2, t3, t4, t5, t6;
t1 = new Time3(); // 00:00:00
t2 = new Time3( 2 ); // 02:00:00
t3 = new Time3( 21, 34 ); // 21:34:00
t4 = new Time3( 12, 25, 42 ); // 12:25:42
t5 = new Time3( 27, 74, 99 ); // 00:00:00
t6 = new Time3( t4 ); // 12:25:42
System.out.println(t1.toUniversalString()+'\t'+ t1.toString());
System.out.println(t2.toUniversalString()+'\t'+ t2.toString());
System.out.println(t3.toUniversalString()+'\t'+ t3.toString());
System.out.println(t4.toUniversalString()+'\t'+ t4.toString());
System.out.println(t5.toUniversalString()+'\t'+ t5.toString());
System.out.println(t6.toUniversalString()+'\t'+ t6.toString());
}
}



不吝赐教!!!!!
...全文

相关推荐

新手学java

新手学java, 非常适合新手阅读。每章配合有实例,最后还有大作业开发过程

lovelyys

新手学Java Web开发

新手学Java Web开发

q331842554

新手学Java7编程(第5版)

新手学Java7编程(第5版)由程序设计畅销书作者herbertschildt撰写,将内容彻底更新至javase 7。首先从基础讲起,介绍了如何编译和运行java程序,然后讨论了关键字、语法和一些结构,它们共同构成了java语言的核心。之后,《新手学java7编程(第5版)》介绍了java的一些高级特性,包括多线程程序设计和泛型。最后以对swing的介绍结束了全书。本教程节奏轻快,可以帮助读者快速掌握java程序设计。   《新手学java 7编程(第5版)》特色   关键技能与概念:在每章开始列出了该章中介绍的技能与概念   专家问答:以问答形式提供了相关信息和实用的提示   编程练习:展示如何应用某种技能的编程练习   自测题:每章最后提供了一些测试对该章内容理解程度的问题   代码注释:示例代码中的注释描述了正在阐述的编程技巧

迷失自我_727

浅谈java 重写equals方法的种种坑

主要介绍了浅谈java 重写equals方法的种种“坑”,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

weixin_38686557

【软件问题】新手安装JAVA、JDK及Java 开发环境配置

目录 JAVA安装 (遇到下载太慢问题) JDK安装 Java 开发环境配置 Windows 10 配置Java 环境变量(详细一点的) 以下均属新手个人经验,可作为参照省去许多麻烦,有其他问题自行参照百度 JAVA安装 eclipse:https://www.eclipse.org/downloads/ (遇到下载太慢问题) 可能是因为选的镜像默认是日本 换成中国就好了 下载完成安装 JDK安装 安装地址https://www.oracle.com/java/technologies/javase-downloads.html 安装完成要记得自己安装哪里,忘记了就重新安装,环境

weixin_38583278
评论 13
收藏 已收藏
分享
返回顶部
苦苦的潜行者
Java SE 62,621 成员 307,251 内容