第一个类和对象
[toc]
一 面向对象的编程语言
1.1 Java面向对象的编程语言
一个Java程序可以认为主要是一系列对象的集合,互相调用彼此的方法来协同工作,计算各对象的状态属性,完成指定的目标任务。
换个说法,Java程序用自己的方式定义描述了现实世界中的事物,并完成了现实世界中的各种行为目标。
举个例子,Java程序有成千上万个,每个程序做了不同的事情。有电商系统,有物流系统,库存系统,财务系统,有电子书城,有地图网站,外语学习网站,还有聊天软件等。这里面的系统也不都是由Java语言完成的。还有别的面向对象的语言。
对Java语言来说,一切皆是对象。把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作。一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的。对象之间通过相互作用传递信息,实现程序开发。
1.2 对象的概念
Java 是面向对象的编程语言,对象就是面向对象程序设计的核心。所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。对象有以下特点:
- 对象具有属性和行为。
- 对象具有变化的状态。
- 对象具有唯一性。
- 对象都是某个类的实例。
- 一切皆为对象,真实世界中的所有事物都可以视为对象。
1.3 前端和后端的区别
一般你能直接看到的软件界面,网站界面,都属于前端编程语言编写的。Java为前端的网站提供数据操作等。
1.4 面向对象的行为过程
以电商系统举例,商品信息都是存储在数据库的(数据库就可以理解成仓库,数据都是存这里面的,方便管理,查询等)。程序将商品抽象出来定义成类,然后从数据库把数据查询出来,看成一个个商品对象,成千上万的商品,通过网络展示到用户前端。
客户端提供各种功能,比如搜索,下单,购买数量,颜色等,然后前端程序再将用户的选择的行为通过网络传递到后端程序。
后端程序基于前端的数据,进行相应的操作,搜索,下单,最后存储到数据库。
其它子系统,比如发货系统,和银行对接的支付系统,进行相应的操作。最终完成了用户的一系列购物行为。
这里简单让你理解下Java Web中面向对象的概念。
二 入门开发的场景知识
刚刚提到了前后端,我们前端的内容以后会学习,暂时只要知道数据都是从服务器端(后端)传到用户端(前端),原始数据都是从各种各样的数据库加载到服务器端的。
入门篇都以建造一个电子图书馆为出发点,里面的最基本的类就是定义电子书,相对逻辑关系简单。比起电商网站,里面定义的商品以及业务太复杂,在后面的阶段再讲。
电子图书馆可以看成是图书馆的系统,为了让大家有实际的感受,又结合了《微信读书》的书城功能,(一般的小说网站,免费阅读的网站都这样,图书阅读,图书推荐,榜单等功能)。目的就是为了让大家学完了就知道编程是怎么一回事了。而不是学完概念,还是不知道该如何编程。
我不想给微信读书做广告,没办法,总得找个例子吧,大家学的时候也有概念。希望这样的链接不会被文章平台封掉。之前有十几篇文章带二维码,封了几个月才给我提示,我一直纳闷,为啥一个阅读都没有。另外,微信读书有小程序和App的,我们以网站为主要示例。
下面将介绍类,变量,方法,对象,实例变量的概念。场景虽然是基于一个更简单的系统电子图书馆。但是当你学会了,就会发现复杂的都是由简单的拼出来的。只是更讲究点技巧和技术。
三 类
之前的章节《打印Hello World》和《print打印详解》中的Hello.java以及 PrintlnExplain.java 都是最简单的类,它们都只包含了一个main函数,作为Java程序的启动入口。
类在定义的时候,可以包含很多概念。
3.1 类的概念
类:类是一个模板,它描述一类对象的行为和状态。
类是 Java中的一种重要的引用数据类型,也是组成 Java 程序的基本要素,因为所有的 Java 程序都是基于类的。
也可以理解成类是定义描述现实世界中的对象的。类似于图纸,设计图,模具。所有的对象的创建,都是基于类的定义。类中定义了什么,对象就拥有什么,可以做什么。
3.2 编写第一个类
以WeiXin读书网站的首页上图书为例,这些数据都是来自于后端,如何定义的呢?
点击该网站,打开首页,可以看到书都有名字,作者,你还能看到它的排名。如下图红色标记。其它知识我们后面再慢慢学。
我们在前面《打印HelloWorld》已经学会如何新建一个类了。我们新建一个名为Book的类,并定义如下属性。尽量用英语,用翻译工具翻译一下。不然开发工具提示拼写错误,十分别扭。对于其他人阅读也方便。
public class Book{
String name; //书名,类型为字符串String,默认值为null
String author; //作者,类型为字符串String,默认值为null
int rank; //排名,类型为整型int,默认值为0
}
定义了一个简单的类Book,和Book的几个属性。类的定义请继续往下看。
3.3 类的定义
在 Java 中定义一个普通的类,需要使用 class 关键字、一个自定义的类名和一对表示程序体的大括号,以及属性和方法。完整语法如下:
public class 类名{
变量类型_1 变量名字_1;//分号隔开
变量类型_2 变量名字_2;//分号隔开
...
//定义方法部分
function1(){
//方法代码
}
function2(){
//方法代码
}
...
}
public:是定义该类是否可以被其它类和程序访问。平时简单开发用public就可以了。表明是公共的。关于类的访问权限后面学习。
class :声明类的关键字。
变量类型:表示成员变量的类型。常见的比如,String是字符串,int是整数,double是小数,还可以将对象作为变量。
function():表示成员方法名称。就是用来描述对象的行为,动作的。
其中的属性和方法按照需要编写,都不是必须的。
四 对象
4.1 对象的概念
所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。对象有以下特点:
- 对象具有属性和行为。
- 对象具有变化的状态。
- 对象具有唯一性。
- 对象都是某个类的实例。
- 一切皆为对象,真实世界中的所有事物都可以视为对象。
4.2 对象是类的实例化
对象是类的实例化,实例化一个对象,简单的方式如下:
new 类名(); // 简单的实例化方式
类名 对象名 = new 类名(); //将一个实例化的类起个名字赋值给它。作为变量使用。称为引用。
4.3 创建对象
对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:
声明:声明一个对象,包括对象名称和对象类型。
实例化:使用关键字 new 来创建一个对象。
-
初始化:使用 new 创建对象时,会调用构造方法初始化对象。
构造方法后面会讲,我们先用默认的构造方法。默认构造方法是不需要编写的。
4.4 实例化一本书
以下代码,Book是我们刚刚定义的类,用关键字new创建,同时给这个对象起个名字,用等于号赋值。
注意观察空格,至少空一个,大于一个也没问题。为了美观要注意统一规范。后面会讲代码编写规范。
public static void main(String[] args){
new Book();//如果不将实例化的对象赋值,它就是孤魂野鬼,找不到归属。其它代码想用它也没办法。因为不知道它叫啥。所以要起个名字,能够引用到它。
Book book = new Book();//实例化了一本书,赋值给book
Book book2 = new Book();//实例化了一本书,赋值给book2
Book book3 = new Book();//实例化了一本书,赋值给book3
System.out.println("----------------以下内容查看实例化后对象的数据----------------");
System.out.println("book 对象,书名:"+book.name+",作者:"+book.author+",排名:"+book.rank);
System.out.println("book2对象,书名:"+book2.name+",作者:"+book2.author+",排名:"+book2.rank);
System.out.println("book3对象,书名:"+book3.name+",作者:"+book3.author+",排名:"+book3.rank);
}
运行该程序,查看打印内容,发现是null和零。对于字符串,默认值都是null,表示没有。对于int整型,默认值为0
4.5 给对象赋值
=
等于号是简单的赋值运算符,将右操作数的值赋给左侧操作数。比如: A = B; 或者 A = B + C;
正如上面打印的内容都是默认的初始值,这些内容自然和我们浏览器看到的不一样。我们是如何赋值的呢。
在同级包下,新建ObjInit
类,这名字随意。并对Book对象初始化。
public class OBjInit {
//该类没有属性,只有main方法。
public static void main(String[] args) {
//我们之前讲过Book类是public的。所以在ObjectInit这个类中也是可以使用这个类的。
Book book = new Book();
Book book2 = new Book();
Book book3 = new Book();
System.out.println("----------------以下内容为对象赋值=----------------");
System.out.println("给book 对象赋值,书名,作者,排名");
book.name = "围城";
book.author = "钱钟书";
book.rank = 3;
System.out.println("给book2 对象赋值,书名,作者,排名");
book2.name = "白鹿原";
book2.author = "陈忠实";
book2.rank = 4;
System.out.println("给book3 对象赋值,书名,作者,排名");
book3.name = "红楼梦";
book3.author = "曹雪芹";
book3.rank = 5;
System.out.println("----------------以下内容查看实例化后对象的数据----------------");
System.out.println("book 对象,书名:"+book.name+",作者:"+book.author+",排名:"+book.rank);
System.out.println("book2对象,书名:"+book2.name+",作者:"+book2.author+",排名:"+book2.rank);
System.out.println("book3对象,书名:"+book3.name+",作者:"+book3.author+",排名:"+book3.rank);
}
}
这里,给对象赋值,所有的值,都来自于业务需要,如果是简单的值,固定的值,比如说,省份,国家,可以直接写死。在本篇Book类中,书籍的内容肯定是来自于数据库的。数据库中存储了很多书的信息,以及书的内容。
在读取数据库,获取到需要的相关数据,进行赋值完成后,通过服务器,网络返回到浏览器端,展示给用户。后面的操作会继续学习。
文章和项目开源地址
一起学习,Java最简单易懂的零基础入门,答疑解惑,关注点赞github
开源:https://github.com/BradYan/easy-java