Java是一门面向对象语言,一个Java程序就是一系列对象(Object)的集合,对象通过方法调用来彼此协作完成特定的功能。我们首先来了解面向对象的几个关键概念。
面向对象是一种非常符合人类思维的编程方法,因为现实世界就是由对象和对象之间的交互来构成的,所以我们其实很容易将现实世界映射到软件开发中。
一辆汽车、一篇博客、一个人,对应到软件系统中都是一个对象;而对象具有自己的状态和行为。
以汽车为例:
提高
描述一个对象具有什么状态和行为的过程叫做建模,不同的意图下我们对同一个事物的描述会产生不同的模型。
其实我们可以把Java语言当成是一门普通的语言,学习英语是为了与世界交流,而学习Java就是与计算机交流。我们需要把自己的思维,通过Java语言表达出来,让计算机理解。
类描述一类对象的状态和行为的模板。可以把类想象成一个汽车设计图,根据这个汽车设计图生产出来的每一辆汽车就是类的一个实例,这些实例就称之为对象。
public class Car {
int color; // 成员变量
int speed; // 成员变量
// 成员方法
void startup() {
System.out.println("启动!");
}
// 成员方法
void run(int speed) {
System.out.println("我的速度是" + speed);
}
}
再比如说我们要做一个博客应用,那么每一篇博客都有类似的状态和行为,那么我们可以定义一个Post
类作为这些博客的模板。
public class Post {
String title; // 成员变量
String content; // 成员变量
// 成员方法
void print() {
System.out.println(title);
System.out.println(content);
}
}
public
是一个修饰符,表示外部可以访问这个类,我们已经在HelloWorld
程序中遇见过了。
Post
的状态和行为就分别体现为内部定义的成员变量和成员方法上。
一个对象的状态是通过成员变量的值决定的。
比如每一辆汽车都有自己的颜色和速度,因此我们在Car
类中定义了两个成员变量,通常我们也称之为属性:
成员变量都有数据类型,color
和speed
都是int
类型,即一个整数。
类似地,每一篇博客都有它自己的标题和内容,因此我们在Post
类中定义了两个成员变量:
title
和content
都是String
类型的属性,即通过一个字符串来表示。
Java语言中的各种数据类型我们稍后讲解。
方法定义了类的行为,一个类可以有很多方法,在方法中可以编写逻辑,操纵数据,执行特定动作。我们有时也称方法为函数。
一个相对独立的计算过程(即对象的某种行为),通过一个方法来完成,在需要的时候即可复用这样的过程,这样可以使得程序更细清晰易懂。
比如Car
有一个命名为startup()
的方法,表示汽车启动:
这个方法向控制台打印一行简单的文字。
Post
类提供了一个打印博客内容的方法:
print()
方法将一个Post
的title
和content
逐行打印出来。
startup()
和print()
方法是一个没有返回值和参数的方法。没有返回值的情况,我们使用void
表示。
方法也可以有一个返回值,可以认为是这个方法得到的一个计算结果,有返回值的情况在后面的课程中会讲解。
我们回到HelloWorld
类中,定义好Post
类之后,我们可以在main
方法中来创建和使用Post
对象了。
public class HelloWorld {
public static void main(String[] args) {
Post post = new Post(); // 创建博客对象
post.title = "天码营的博客"; // 访问对象属性
post.content = "这是我的第一篇博客"; // 访问对象属性
post.print(); // 调用对象方法
}
}
提示
注意你需要在Eclipse在创建一个Post
类,否则HelloWorld
类会有编译错误。
我们需要给声明对象的类型为Post
,并进行命名,代码中命名为post
(post
就是一个标识符);然后我们需要使用new
关键字创建Post
对象。
这里创建的post
变量是函数内的局部变量,你也可以命名为其它任何合法的标识符,比如:
变量一般都是以小写开头,使用驼峰命名。
局部变量与成员变量不同,它不属于某个对象,是一个临时变量,当方法执行结束,变量就不再起作用了。一个方法中声明的变量都属于局部变量。
现在我们已经有一个Post
对象了,我们可以访问其属性和方法了, 使用.
连接对象名和属性/方法名:
post.title = "天码营的博客"
对post
对象的title
属性进行赋值。
post.print()
这一行代码调用post
对象的print()
函数。
运行程序可以看到下面的输出:
同理,加入你创建了一个Car
对象,命名为myCar
,如果你要将其速度设置为100
的话,使用如下语句:
在开发过程中,类的数量会越来越多,我们可以通过包(Package)来组织类。包的命名一般以一个组织的域名的反写开头。比如天码营的域名是tianmaying.com
,那么天码营开发的代码,包名一般就会以com.tianmaying
开头。
我们来创建一个com.tianmaying
的包名。右键点击src
文件夹,【New】->【Package】,输入com.tianmaying
,即创建成功。我们将HelloWorld.java
拖入该包内。打开这个文件,我们看到Eclipse增加了一行代码:
在一个大型项目中,我们会将成百上千的类,放到不同的包中,不仅更易于查找,也能防止命名冲突。
命名冲突即类同名的情况,想想一下同一个文件夹下是不可以有两个同名的文件的,不同文件夹下就不存在这个问题,包可以看做是存放Java类的不同文件夹。
登录发表评论 登录 注册
在”创建和使用代码“这一节,建议在给出代码时加一句提示:使用该代码前需先定义成员变量和成员方法。因为在实际操作中,新手可能直接复制代码导致无法运行。
不是啊,很帅的周杰伦,很帅是修饰符,周杰伦是标识符
定义好这个类的属性和方法就可以了
如何创建这个Post类?
修饰符和标示符是一个意思吗?
不用这个的话有没什么办法可以解决呢
没有定义对应的成员变量。
如果说一个人是一个类,一个人有眼镜和鼻子,眼镜和鼻子就是人的成员变量。 @958911753
变量和局部变量呢
除了改語言,沒有解決方案了嗎。電腦因為某些原因不能改。已經到第五節了
改简体语言哪~
繁體字,編譯報錯怎麼辦,電腦系統是繁體語言。我把漢字改數字就能編譯與執行。
ok, 明白了,要把public class Post那一段新建一个类。谢谢。
@lcgogo 你没有创建Post类吧
public class HelloWorld {
public static void main(String[] args) {
Post post = new Post(); // 创建博客对象
post.title = "天码营的博客"; // 访问对象属性
post.content = "这是我的第一篇博客"; // 访问对象属性
post.print(); // 调用对象方法
}
}
我一运行就报错
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Post cannot be resolved to a type
Post cannot be resolved to a type
at Helloworld.main(Helloworld.java:22)
这是为什么?
把main函数里的代码替换掉原来main函数中的代码就行。
另外这一段代码应该用在什么地方?
HelloWorld这个class中,不是已经有以下的代码了吗?
多谢解答~
按照这个指导创建Post类,但有报错信息。请问要如何处理?
报错信息如下:
这不是错误,是一个警告,没什么问题。
为什么创建对象错误?
@codegod 已经按照你的建议做了修改了
这个建议不错!
我认为网站右下角的实战任务应该取消.只保留下一节,到课程最后一节只保留实战任务.这样就不会发生误点状态.
问老师哪
问老师哪
作业不会做怎么办
Post post = new Post();
//这里一直出错
都复制粘贴直接在eclipse里都一样
怎么打开参考代码?用什么软件打开?
你没有重新javac
哈,太仔细了,赞!
void startup() { System.out.println(“启动!”); }
这里的双引号用的是中文。。。
public class HelloWorld { public static void main(String[] args) { Post post = new Post(); // 创建博客对象 post.title = "天码营的博客"; // 访问对象属性 post.content = "这是我的第一篇博客"; // 访问对象属性 post.print(); // 调用对象方法 } } 课程中这段代码缺少对title和content的变量声明,根本无法执行啊
liaowugangdeMacBook-Pro:tianmaying liaowugang$ java HelloWorld
错误: 找不到或无法加载主类 HelloWorld
liaowugangdeMacBook-Pro:tianmaying
这个怎么处理啊 我在eclipse 上运行没问题 在终端就不行了
那个null 是 什么情况造成的呢
需要看到完整的代码比较好给建议。
从出错信息来看,你应该在HelloWorld中调用了类似new Post("123"); 这样的构造函数,但是你在Post中没有定义只包含一个String参数的构造函数,所以会报undefined。
没有对应的构造函数
请教Unresolved compilation problem: The constructor Post(String) is undefined 创建了Post.java为什么编译不了了 运行HelloWorld会出现上面的提示
因为你没有使用Post
import com.tianmaying.domain.Post;
我的代码:
嗯嗯好的,理解了,O(∩_∩)O谢谢
定义一个变量的标准写法:Post是类型,post是这个类型的变量(对象实例),你也可以命名为任意合法的标识符,比如post2
请问第一个大写的Post和后面小写的post的区别是什么呀
创建一个
Post
类。/**
*
*/
package com.JayNoE.Text;
/**
* @author JayNoE
*
*/
public class JayNoE {
public static void main(String[] args) {
Post post = new Post("天码营的博客", "这是我的第一篇博客"); // 创建博客对象
post.print(); // 调用对象方法
}
}
报错:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Post cannot be resolved to a type
Post cannot be resolved to a type
at com.JayNoE.Text.JayNoE.main(JayNoE.java:14)
这是什么情况啊
谢谢
你是想创建两个
Post
吧,这样写:就是开头的创建和是应对象。
public class HelloWorld { public static void main(String[] args) { Post post = new Post("天码营的博客", "这是我的第一篇博客"); // 创建博客对象 post.print(); // 调用对象方法 } }
代码贴上来
最早的Post post = new Post(...)括号里只打一对"我的..."会报错,打两个"我的...","第一个..."就没事了,为什么啊,,
删除后还是这样,自动修复后说no suggestions available。我自己加上了
import com.hello.domain.Post;
这行代码,运行正常。有点懵。
感谢。
好TM难啊 各位兄弟都是花了多长时间入门的
把default package中的文件删除了试试。可以用用Eclipse的自动修复功能,ctrl+1。
import com.tianmaying.domain.Post;
错误显示的是:Description Resource Path Location Type
Post cannot be resolved to a type HelloWorld.java /HelloWorld/src/com/hello line 6 Java Problem
代码都是对的呀。
1.右键src-new-class-填写Post(注意大小写)
注意package helloworld不要删除
复制黏贴<构造函数>的代码
点击绿色执行按钮
2.右键src-new-class-填写helloworld
注意package helloworld不要删除
复制黏贴<创建和使用对象>的代码
点击绿色执行按钮
3.再按照<包与import>来执行
大写
Post
就是post
这个类型的实例。看看第五课能不能详细一点?比如我理解的是调用一个新的Post(“....”)赋值给post,那么小写字母开头的post就是一个变量,那么一个(大写字母的)Post是什么意思呢?
定义一个类型的变量。
谢谢提醒,原来是这么回事,竟然还能这么玩,请问大神Post post=new Post(".....")这里面前两个post是什么意思,怎么解释啊?
那要怎么应用这个Post.java?
不要用内部类,专门新建一个Post.java文件来存放Post的代码。
终于写出了完整版
要创建一个
Post
类。编译警告,或者项目设置的警告,一般不影响项目正常编译和运行。@1328803630
构造函数不能有返回值。
函数重载跟返回值没有关系。
@天码君 @Toder 谢谢大哥,懂了。
@HELLOWORLD
public class Post { private String title; private String content; public void print() { System.out.println(this.title); System.out.println(this.content); } }
大哥还是不明白啊,教程里在哪儿有解释么?
@HELLOWORLD 创建Post类
各位学过来的大哥们,为什么我原封不动的把代码复制到了esclipse里,也会报错啊。@Toder @vrmango @liangliangwqy
果然是这样,解决问题了,谢谢啊
post.print()
而不是Post.print()
,此外要创建Post
类才能使用,你写Post
类的代码了吗?问题依旧@Toder
@vrmango 大小写有误,应该是:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Post cannot be resolved to a type
Post cannot be resolved to a type
at HelloWorld.main(HelloWorld.java:7)
拖动不知道什么意思
看了一下分号确实有问题,谢谢
@liangliangwqy 应该是你打的分号是中文的分号。
对这一行里的前两个Post不是太明白,在eclipse里面报错
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The left-hand side of an assignment must be a variable
Syntax error on token "Invalid Character", invalid AssignmentOperator
Syntax error on token "Invalid Character", ; expected
at blog.HelloWorld.main(HelloWorld.java:5)
Post Post = new Post("天码营的博客", "这是我的第一篇博客"); // 创建博客对象
“比说我们要做一个博客应用”
应是“比如说。。。”