Hello world!

本文以轻松幽默的方式介绍了Java中的类与对象概念,包括类的组成部分如局部变量、成员变量和类变量,构造方法的作用及使用,以及继承的概念和权限修饰符的运用。

Hello world!

我打算用我们Java一族经典的问候方式来作为我们之间的第一句问候语!

大家好,我是类!超级无敌大帅哥花泽类的类。

我是创建Java对象的模板。至于我是怎样的模板,这要看我的程序员爸爸是怎么写我了。首先我和人类一样,我有名字——类名。正如人类的名字,我的名字通常首字母要大写就像SteveJobs,不过姓名之间没有空格,因为根据我们的Java法典,名字只能由字母、数字、_或者$组成,并且不能以数字开头。至于为什么这样,你要问程序员爸爸了。

我们类可以拥有很多种类型的变量,它们分别是局部变量、成员变量、类变量。

局部变量是个待在方法、构造方法或者语句块里从不出来的骨灰级死肥宅,它的声明和初始化都是在方法中,方法一旦结束,就自动销毁见光死。

成员变量是定义在我们类中,但在方法体之外的变量,他在我们创建对象的时候实例化。

类变量也声明在类中,方法体之外,但它必须贴上static的标签。并且在使用它时候,只需要使用 类名.变量名 即可。

我们每个类中都有一个构造方法,即使程序员爸爸并没有显示地为我们定义,Java族的基因给我们提供一个默认的构造方法。构造方法对于我们而言就像是双手,因为只有调用构造方法,我们才能创建并初始化出一个对象。构造方法的名称必须和我们同名,我们可以有很多个构造方法。

图片

构造方法示例

我们就像是一个个小型工厂,生产出同一类型的产品。我们的产品是对象。而对象将方法和属性耦合在一起。

若想创建一个对象,首先要跟Java族打声招呼,声明一个对象,包括对象名称和对象类型。其次需要制造工程师new出马,我们才能创建一个对象,最后会调用构造方法来初始化对象。比如我们的Puppy类:

图片

创建对象的例子

我们的子女是子类,如果想继承我的财产,必须通过extends关键字来表示:

图片

想继承我的遗产吗?成为我的宝宝吗?用extends!

在Java法典中,一个子类只能继承一个父类,是啊,作为一个类,我们不能太贪婪!到处喊爸爸像什么样子!

通常子女们只能继承爸爸的非私有属性和方法,什么叫私有,什么叫非私有呢?这里牵扯到律法中的权限修饰符了,它们是每个类、方法、属性都可以选择的标签。

标签有三个,分别是private私有的,protected受保护的,public公共的,什么标签也没有贴的就是不使用任何修饰符即default默认的。

我们类只有public和default可供选择。通常类们居住在一个一个的包中,贴上public的类非常热情好客,通过导包可以被不同包的其他类访问,但是什么标签都没有贴的default的类比较内向,只能被同包的类访问。

对于我们的属性和方法,四个都可以选择,通常我们会把自己比较私密的属性和方法贴上private,这样这些属性和方法只能在本类使用,即便是我们的子女也无法继承,毕竟,就算是人类也不想把自己穿过的小内裤等等私人的东西或者一些不可告人的小癖好传承给子女吧!并且,通过private修饰符,可以隐藏我们类的实现细节并且保护我们的数据。

而我们希望继承给我们的子女的属性或者方法,我们会给它们贴上protected的标签,这样只要是我们的子女,不论它们是否与我们居住在同一个包,都能够使用我们的方法和属性。当然如果一个类和我们居住在同一个包中,即使他不是我们的子女,也能够使用protected的方法或者属性。

public和default两个标签的作用对于方法属性和类是一样的,public的方法属性无论是否同包无论是否是我们的子女,都能使用,而default的方法属性只能由同包的类所使用。

图片

 

不过时常有些很酷的丁克类,他们自愿到医院实施 final手术,手术完成后,他们就再也不能有自己的宝宝,再也不能被继承!潇洒走一生!

同时我们的子女——子类,并非循规蹈矩之辈,他们有些特立独行,不满于我们给予他们的属性方法,会添加上自己独特的方法和属性,成为不一样的烟火。同时对于我们给予的某些方法,如果无法满足他们的需求,他们常常会自己动手改造,重写这些方法。

我们之中还存在着一群抽象派的类,他们天性自由,不拘一格,从不实例化对象,他们贴着abstract的标签,他们这样就有资格拥有abstract的方法,抽象方法没有定义,它们没有方法体,方法名后面直接跟一个分号而不是花括号。

图片

抽象方法只包含一个方法名,而没有方法体。

并且如果哪个子类继承了抽象方法,就必须把这些抽象方法统统实现,所谓实现,就是重写父类的抽象方法。如果子类不想实现也可以,那子类必须也是个抽象派(声明为抽象类)。

最后,怎么能忘记我们的老祖宗Object类呢?我们身上都流淌着他的血液。而读者们,身为炎黄子孙,什么时候也讲讲你们的故事?

更多有意思的技术文章请关注作者头像 点击 关注 更多惊喜等着你。

 

转载于:https://my.oschina.net/u/3731401/blog/1603013

<think>好的,我现在需要解决用户的问题,即如何输出三行“hello world!”。用户提供的样例输出是三行相同的字符串,每行一个。我需要确保代码能够正确生成这样的输出。 首先,用户的问题看起来相对简单,但我要仔细确认要求。问题描述是输出三行字符串,而样例显示三个“hello world!”。所以核心任务就是让程序打印这个字符串三次,每次单独一行。 接下来,考虑可能的实现方法。常见的方法有三种: 1. 使用三次print语句,每次打印“hello world!”。这种方法虽然直接,但如果需要重复多次,代码会显得冗余。 2. 使用一个循环,比如for循环,重复三次打印操作。这样代码更简洁,尤其是当需要更多次重复时。 3. 利用字符串乘法,将字符串乘以三,然后用一个print语句处理换行。不过要注意,字符串乘以三会变成“hello world!hello world!hello world!”,需要用换行符连接。 现在,我需要评估哪种方法最适合当前的问题。样例输出是三行独立的“hello world!”,所以每个字符串后面都需要换行。使用三次print语句会自动换行,这是最简单的方式。循环方法也是可行的,尤其是当次数较多时,但三次可能差别不大。第三种方法需要确保每个字符串之间有换行符,比如使用'\n'连接,然后一次打印。 但用户可能希望代码简洁,特别是如果次数增加的话。不过题目明确要求三次,所以三种方法都可行。不过,考虑到代码的简洁性和可读性,使用三次print语句是最直接的,没有循环的开销,适合新手理解。 然后,我需要验证每种方法的正确性。例如,第三种方法如果写成print("hello world!\n" * 3),会在最后多出一个换行符,导致输出四行(如果最后有空行)。但样例输出是三行,没有多余空行,所以这种方法需要调整,使用rstrip或者调整字符串。例如:"hello world!\n" * 3会生成三行,每行后面有换行,但最后一行末尾也会有换行,这可能符合要求,但需要测试。 不过,使用三次print("hello world!")会确保每行之后换行,且没有多余空行。样例输出正是如此,所以这是最保险的方法。 接下来,检查用户是否有其他潜在需求。例如,是否允许在输出末尾有空行,但样例显示没有,所以必须确保每行只有一个换行。三次单独的print语句可以做到这点。 最后,编写代码。最简单的实现就是三个print语句。但用户可能希望代码更高效或简洁,所以可能需要说明其他方法,但以最直接的方式作为答案。</think>### **解决思路** 要输出三行相同的字符串"hello world!",可以使用以下两种方法: --- ### **方法一:直接重复打印** ```python print("hello world!") print("hello world!") print("hello world!") ``` --- ### **方法二:循环实现** ```python for _ in range(3): print("hello world!") ``` --- ### **代码解释** 1. **方法一**: - 直接调用 `print()` 函数三次,每次输出相同的字符串。 - 适合固定次数的简单输出。 2. **方法二**: - 使用 `for` 循环重复执行 3 次,每次输出字符串。 - 更灵活,适用于需要多次重复的场景。 --- ### **示例验证** 输出结果: ``` hello world! hello world! hello world! ``` 与样例完全一致,验证通过。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值