博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java编程基础:了解面向对象
阅读量:4089 次
发布时间:2019-05-25

本文共 3377 字,大约阅读时间需要 11 分钟。

发表在

面向对象基础

Java是一门面向对象语言,一个Java程序就是一系列对象(Object)的集合,对象通过方法调用来彼此协作完成特定的功能。

面向对象是一种非常符合人类思维的编程方法,因为现实世界就是由对象和对象之间的交互来构成的,所以我们其实很容易将现实世界映射到软件开发中。

其实我们可以把Java语言当成是一门普通的语言,学习英语是为了与世界交流,而学习Java就是与计算机交流。我们需要把自己的思维,通过Java语言表达出来,让计算机理解。

我们首先来了解面向对象的几个关键概念。

类描述一类对象的状态和行为的模板。可以把类想象成一个手机设计图,根据这个手机设计图生产出来的一个个手机就是类的实例,这些实例就称之为对象。

比说我们要做一个博客应用,那么每一篇博客都有类似的状态和行为,那么我们可以定义一个Post类作为这些博客的模板。

public class Post {    private String title;    private String content;    public void print() {        System.out.println(this.title);        System.out.println(this.content);    }}

public是一个修饰符,表示外部可以访问这个类,我们已经在HelloWorld程序中遇见过了。

Post的状态和行为就体现内内部定义的成员变量和成员方法上。

成员变量

一个对象的状态是通过成员变量的值决定的。比如每一篇博客都有它自己的标题和内容。因此我们在Post类中定义了两个成员变量,通常我们也称之为属性

private String title;    private String content;

private也是一个修饰符,表示这两个属性不能被外部直接访问。面向对象编程中一般需要进行信息隐藏,因此类的成员变量大多数情况下都是private的。

成员变量都有数据类型,这里titlecontent都是String类型的属性,即通过字符串来表示。

Java语言中的各种数据类型我们稍后讲解。

成员方法

方法定义了类的行为,一个类可以有很多方法,在方法中可以编写逻辑,操纵数据,执行特定动作。我们有时也称方法为函数

比如Post类提供了一个打印博客内容的方法:

public void print() {    System.out.println(this.title);    System.out.println(this.content);}

print方法是一个没有返回值和参数的方法。没有返回值的情况,我们使用void表示。

方法可以有返回值和参数,比如我们可以定义下面这个方法:

public int printWithAuthorName(String authorName) {    System.out.println(authorName);    System.out.println(this.title);    System.out.println(this.content);    return this.content.length();}

在上面这个方法中,printWithAuthorName返回一个整数,表示博客内容的长度,传入了一个String类型的参数authorName,表示可以传入作者名称一起打印出来。

构造函数

对象是类的一个实例,当一个对象创建时,需要调用类的构造函数(或者成为构造方法),这是一种特殊的成员方法。构造函数是一种和类具有同样的名字的函数,不能有返回值。一个类可以有不止一个构造函数。

具有相同命名的函数,其函数参数的类型或者个数不同的现象,我们称之为函数重载

比如为了让别人可以创建Post对象,我们可以增加两个构造函数:

public class Post {    private String title;    private String content;    // 第一个构造函数,    public Post() {    }    // 第二个构造函数,传入标题和内容    public Post(String title, String content) {        this.title = title;        this.content = content;    }    public void print() {        System.out.println(this.title);        System.out.println(this.content);    }}

第一个构造函数是没有任何参数的构造函数。第二个构造函数,包含了两个参数,表示创建一个Post对象时需要初始化其标题和内容。

在第二个构造函数中,this.title = title这行代码中的this表示的是当前对象。当一个类需要访问自身的属性和方法时,一般会用到this,这行代码的意思就是将title这个参数的值赋给当前对象的title属性。

如果我们没有定义构造函数,Java编译器会自动给我们生成一个没有任何参数的构造函数。如果我们自己定义了任何形式的构造函数,则编译器就不会给我们生成了。

创建和使用对象

我们回到HelloWorld类中,此时我们可以在main方法中来创建和使用Post对象了。

public class HelloWorld {      public static void main(String[] args) {        Post Post = new Post("天码营的博客", "这是我的第一篇博客"); // 创建博客对象        Post.print(); // 调用对象方法    }}

我们需要给声明对象的类型为Post,并进行命名,代码中命名为Post;然后我们需要使用new关键字来调用Post的其中一个构造函数,这里我们传入博客的标题和内容。

这里创建的Post变量是函数内的局部变量,与成员变量不同,它不属于某个对象,是一个临时变量,当方法执行结束,变量就不再起作用了。一个方法中声明的变量都属于局部变量。

现在我们已经有一个Post对象了,我们可以访问其公共方法了,Post.print()这一行代码就能打印出博客了。运行程序可以看到下面的输出:

天码营的博客这是我的第一篇博客

包与Import

在开发过程中,类的数量会越来越多,我们可以通过包(Package)来组织类。包的命名一般以一个组织的域名的反写开头。比如天码营的域名是tianmaying.com,那么天码营开发的代码,包名一般就会以com.tianmaying开头。

我们来创建一个com.tianmaying的包名。右键点击src文件夹,【New】->【Package】,输入com.tianmaying,即创建成功。我们将HelloWorld.java拖入该包内。打开这个文件,我们看到Eclipse增加了一行代码:

package com.tianmaying

这行代码就表示当前类对应的包。

同样的操作,我们创一个com.tianmaying.domain包,表示这个包中包含了领域逻辑相关的代码。然后将Post.java拖入该包内。进行了这些操作之后,我们再次打开HelloWorld.java,发现Eclipse再次增加了一行代码:

package com.tianmayingimport com.tianmaying.domain.Post;

此时PostHelloWorld位于不同的包中,当我们需要去使用其它包中的类时,就需要使用import关键字将该类引入,这样Java编译器就能找到我们需要使用的类。

在引用类时,我们可以给定类的全限定名,也可以使用通配符。比如我们使用import com.tianmaying.domain.*;也能达到同样的效果,因为*表示引入com.tianmaying.domain包下所有的类。

更多文章请访问

你可能感兴趣的文章
似乎写个ROS功能包并不难,你会订阅话题发布话题,加点逻辑处理,就可以写一些基础的ROS功能包了。
查看>>
PX4官方用户和开发手册的首页面是会给你选择英文和中文的
查看>>
《跟工程师学嵌入式开发》这本书最后的终极项目我反而觉得有说头
查看>>
博士的申请考核制
查看>>
MAVLink学习之路05_MAVLink应用编程接口分析(也有讲STM32下的收发函数)
查看>>
找到了中文版的mavlink手册
查看>>
浅谈飞控开发的仿真功能
查看>>
我觉得在室内弄无人机开发装个防撞机架还是很有必要的,TBUS就做得很好。
查看>>
serial也是见到很多次了,似乎它就是一种串行通信协议
查看>>
TBUS的一些信息
查看>>
专业和业余的区别就在于你在基础在基本功打磨练习花的时间
查看>>
通过mavlink实现自主航线的过程笔记
查看>>
Ardupilot飞控Mavlink代码学习
查看>>
这些网站有一些嵌入式面试题合集
查看>>
我觉得刷题是有必要的,不然小心实际被问的时候懵逼,我觉得你需要刷个50份面试题。跟考研数学疯狂刷卷子一样!
查看>>
我觉得嵌入式面试三要素:基础吃透+项目+大量刷题,缺一不可。不刷题是不行的。而且得是大量刷,刷出感觉套路,别人做题都做得是固定题型套路条件反射了,你还在那慢慢理解慢慢推是不行的,也是考研的教训。
查看>>
删除docker容器和镜像的命令
查看>>
gazebo似乎就是在装ROS的时候一起装了,装ROS的时候选择的是ros-melodic-desktop-full的话。
查看>>
React + TypeScript 实现泛型组件
查看>>
TypeScript 完全手册
查看>>