Java基础-初识面向对象编程(Object-Oriented-Programming)

                                    作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

  Java是一门面向对象的程序设计语言。那么什么是面向对象编程呢?本篇博客会带你了解到如何定义一个类,以及对自定义的类进行实例化操作。让我们一起目睹Java语言的编程风格吧。

一.类和对象的概念

1>.对象的概念

  现实世界中客观存在的事物就是对象。

2>.类的概念

  把一组对象相同的属性和相同的行为抽象出来就形成了类。类是对一组对象相同属性和相同行为的描述。

3>.类和对象的关系

  对象是具体的,类是抽象的,类是对象的模板,对象是类的实例。

二. 引用数据类型分类

  提到引用数据类型(类),其实我们对它并不模式,如我们使用过的Scanner类,Random类以及Math类。我们可以把类分为两种:

    1>.第一种是Java为我们提供好的,如Scanner,Random,Math类等等,这些以及存在的类中包含了很多的方法与属性,可供我们使用。

    2>.第二种是我们自己创建的类,按照类的定义标准,可以在类中包含多个方法与属性,来供我们使用,本篇博客以及后面更新的关于面向对象编程的内容基本上都是在介绍第二种的简单使用。

  注意,引用类型不仅仅只包含类,在Java编程语言中,引用数据类型大致分三种,即数组,类和借口。本篇博客只是介绍其中的类。

三.自定义数据类型概述

  我们在Java中,将现实生活中的事物抽象了代码。这时,我们可以使用自定义的数据类型(类)来描述(映射)现实生活中的事物。

  类,他是引用数据类型,与之前学习的(一维数组,二维数组)所有引用数据类型相同,自定义类也是一种数据类型。只是自定义类型并非Java为我们预先提供好的类型。而是我们自定定义的一种引用数据类型用来描述的一个事物。

四.类与对象的定义

1>.定义类

  在Java中,先定义类,再通过类来创建对象。定义类的格式如下:

/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/[修饰符] class 类名{//属性;//行为;
}1>.类的修饰符可以有:public,abstract,final等;
2>.class是一个关键字,用来定义类;
3>.类名是程序员起的名字;
4>.类体需要使用一对大括号括起来;
5>.在类体中一般描述所有对象共同的属性和共同的行为;
6>.属性用变量来保存,行为用方法来表示;

  接下来,我们一起来定义一个Person类如下:

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6
 7 public class Person{
 8     String name;
 9     String gender;            //性别
10     int     height;
11     String personID;        //身份证号码
12
13     public void eat(Person p){
14         System.out.printf("%s需要吃饭!\n",p.name);
15     }
16
17     public void drink(Person p){
18         System.out.format("%s需要喝水!\n",p.name);
19     }
20
21 }

2>.创建对象

  如何创建对象呢?其实很简单,格式为:“类名 对象名 = new 类名();”。我们上面一定定义了一个Person类,那么我们就可以把定义的类拿来创建一个Person对象。

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6
 7 public class PersonDemo{
 8     public static void main(String[] args){
 9         //第一步,创建对象
10         Person p1 = new Person();
11         /**
12         *   1>.Person是一个类名,在Java中,类是一种引用数据类型,Person是一个数据类型
13         *    2>.P1是对象名,实际上就是Person这个类型定义的变量名;
14         *    3>.给p1这个对象进行赋值时,"new Person()"的返回值赋值给P1变量;
15         *    4>.new 运算符会在堆区中分配一块存储空间,把这块存储空间的起始地址赋值给变量p1;
16         *    5>.p1 变量中保存的是堆中内存的一个地址(引用)
17         */
18
19         //第二步,类创建了对象之后,对象就可以通过成员运算符(.)访问它的属性和方法
20         p1.name = "尹正杰";
21         p1.gender = "男";
22         p1.height = 175;
23         p1.personID = "1100201804085280";
24         System.out.printf("姓名:%s,年龄:%s,身高:%d,身份证号码:%s\n",p1.name,p1.gender,p1.height,p1.personID);
25         p1.eat(p1);
26         p1.drink(p1);
27     }
28 }

3>.案例展示

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6
 7 public class Dog{
 8     String nickname;
 9     String gender;
10     int age;
11     String varieties;        //品种
12
13     public void showInfo(){
14         System.out.println("以下是狗狗的信息:");
15         System.out.printf("狗狗的名字是:%s\n",nickname);
16         System.out.printf("狗狗的性别是:%s\n",gender);
17         System.out.printf("狗狗的年龄是:%s\n",age);
18         System.out.printf("狗狗的品种是:%s\n",varieties);
19     }
20
21     public void bark(){
22         System.out.println("汪汪汪~");
23     }
24
25     public void eat(){
26         System.out.println("狗狗喜欢吃肉肉~");
27         shake();    //在类的一个成员方法中,可以调用另外的成员方法。
28     }
29
30     public void guard(){
31         System.out.println("狗狗在看门,生人勿进!");
32         shake();
33     }
34
35     public void shake(){
36         System.out.println("狗狗在摇尾巴");
37     }
38 }

  上面我们定义了一个Dog类,我们接下来我们可以调用一下我们定义的类,代码如下:

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6
 7 public class DogDemo{
 8     public static void main(String[] args){
 9         Dog myDog = new Dog();
10         myDog.age = 3;
11         myDog.gender = "公的";
12         myDog.nickname = "二狗子";
13         myDog.varieties = "哈士奇";
14
15         myDog.showInfo();
16         myDog.guard();
17         myDog.eat();
18     }
19 }

五.类定义成员变量默认初始化

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6
 7 public class Person{
 8     /**
 9     *    在定义类时,可以给成员变量赋初值,类创建了对象,如果没有给对
10     *象的这个成员变量赋值,这个成员变量的值就是在定义时赋的初始值。
11     */
12     String name;
13     String gender;            //性别
14     int age;
15     String country = "中国";    //定义变量时,可以赋初值。
16     boolean isMarried;        //是都已婚
17
18     public void showInfo(){
19         System.out.printf("姓名:%s\n",name);
20         System.out.printf("性别:%s\n",gender);
21         System.out.printf("年龄:%s\n",age);
22         System.out.printf("国籍:%s\n",country);
23         System.out.printf("婚否:%s\n",isMarried);
24     }
25 }

  通过类定义了对象,如果不给对象的各个变量赋值,对象的各个成员变量会进行默认的初始化,如:

    1>.数值性,数据默认初始化为0;

    2>.字符类型默认初始化为码值为0的字符;

    3>.布尔类型默认初始化为false;

    4>.引用数据类型默认初始化为null;

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6
 7 public class PersonDemo{
 8     public static void main(String[] args){
 9         Person p1 = new Person();
10         p1.showInfo();
11
12         Person p2 = new Person();
13         p2.country = "美国";
14         p2.showInfo();
15     }
16 }

六.自定义类的内存图

1>.Phone.java文件内容

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6
 7 public class Phone{
 8     /*
 9     要求:
10         使用Java中的类,描述生活中的手机这个事物。
11     */
12     String color;
13     String brand;
14     double size;
15 }

2>.PhoneDemo.java文件内容

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6
 7 public class PhoneDemo{
 8     public static void main(String[] args){
 9         Phone p = new Phone();
10
11         p.color = "土豪金";
12
13         p.brand = "IPhone 8 puls";
14
15         p.size = 5.5;
16
17         System.out.println("颜色:" + p.color+ "品牌: " +    p.brand + "尺寸大小:" + p.size );
18
19     }
20 }

3>.自定义类型内存图

  别看上面就几行代码,但是运行机制我们还是得了解的,下面我简要画一下图,以便记忆:

七.类定义使用自定义类型定义成员变量

  其实,我们可以模拟生产小汽车为例,来说明一下用自定义类型定义成员变量,分为三个文件:Engine.java,Car.java以及CarDemo.java文件。

1>.Engine.java文件内容如下:

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6
 7 public class Engine{
 8     double    displacement;        //排量
 9     int        powerSize;            //功率
10
11     public void start(){
12         System.out.println("发动机点火");
13     }
14
15     public void stop(){
16         System.out.println("发动机熄火");
17     }
18 }

2>.Car.java文件内容如下:

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6
 7 public class Car{
 8     String carBrand;            //汽车品牌
 9     int        price;                //汽车价格
10     String  color;                //汽车颜色
11     String  motorcycleType;     //车型
12     double    oilConsumption;        //油耗
13
14     Engine    carEngine;            //发动机
15     /**
16     *    注意,Engine是我们定义的类,也就是说我们可以使用自定义的类型来定义成员变量。
17     */
18
19     public void start(){
20         System.out.println("小汽车启动,实际上是发动机点火!");
21         carEngine.start();
22     }
23
24     public void stop(){
25         System.out.println("小汽车停止,实际上是发动机熄火!");
26         carEngine.stop();
27     }
28
29     public void showInfo(){
30         System.out.println("汽车信息如下:");
31         System.out.format("汽车品牌:%s\n",carBrand);
32         System.out.format("汽车价格:%s\n",price);
33         System.out.format("汽车颜色:%s\n",color);
34         System.out.format("车型:%s\n",motorcycleType);
35         System.out.format("油耗:%s\n",oilConsumption);
36         //排量和功率是发动机的排量和功率。
37         System.out.format("排量:%s\n",carEngine.displacement);
38         System.out.format("功率:%s\n",carEngine.powerSize);
39     }
40 }

3>.CarDemo.java文件内容如下:

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6
 7 public class CarDemo{
 8     public static void main(String[] args){
 9         //创建小汽车对象,也可以说是生成了一台小汽车
10         Car car1 = new Car();
11
12         car1.carBrand = "Benz";            //相当于贴标签
13         car1.price = 130;                //喷漆
14         car1.color = "red";                //相当于喷漆
15         car1.motorcycleType = "SUV";    //设置类型
16         car1.oilConsumption = 15;        //标注油耗
17
18         Engine engine1 = new Engine();    //先生成一台发动机
19         engine1.displacement = 6.0;
20         engine1.powerSize = 480;
21         car1.carEngine = engine1;        //相当于把发动机装配到小汽车上
22         car1.showInfo();
23
24         car1.start();
25         car1.stop();
26     }
27 }

八.匿名对象(Anonymous Object)

1 匿名对象是对象的简化形式
2 匿名对象两种使用情况
3   1.对象方法仅进行一次调用时,多次调用不适合
4   2.匿名对象可以作为实际参数进行传递
5 使用匿名对象的好处
6   1.简化写法,不必定义变量接住对象引用
7   2.对象用完之后就变成垃圾内存,可以被垃圾回收器回收

转载于:https://www.cnblogs.com/yinzhengjie/p/8746919.html

Java基础-初识面向对象编程(Object-Oriented-Programming)相关推荐

  1. Python编程基础:第三十九节 面向对象编程Object Oriented Programming

    第三十九节 面向对象编程Object Oriented Programming 前言 实践 前言 到目前为止我们都是函数式编程,也即将每一个功能块写为一个函数.其实还有一种更常用的编程方式被称为面向对 ...

  2. 面向对象编程 object oriented programming(OOP)

    面向对象编程,是一种编程方式,这种编程方式需要使用"对象"来实现 对象的特征 世间万物皆对象 每个对象都是唯一的 对象具有属性和行为(对象的行为包括具有的功能及具体的实现) 对象具 ...

  3. BioPython ② | 面向对象编程Object Oriented Programming

    BioPython ② | Python面向对象编程 题目要求 定义分子类(Molecule)作为基类,包含集合elements和weight作为其属性,用初始化函数,将elements初始化为空集, ...

  4. python, 面向对象编程Object Oriented Programming(OOP)

    把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数 ...

  5. 面向对象编程 object oriented programming(OOP)(第二篇)

    函数装饰器 对于某个函数,如果我们希望在不改变该函数代码的前提下,为该函数增加额外的功能,那么就可以使用装饰器来装饰该函数. 装饰器是一个函数,装饰器接收一个函数作为参数(传入的实参是被装饰的函数) ...

  6. SystemVerilog HVL:面向对象编程(Object Oriented Programming, OOP)

    目录 1. 封装 1.1. 构造函数 new 与句柄 1.2. 调用句柄 1.3. 静态属性 与 静态方法 1.4. 权限(local和protected) 2. 继承 2.1. 子类的构造函数 3. ...

  7. 一文带你深入理解【Java基础】· 面向对象编程(下)②代码块、final和abstract

    写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...

  8. Java基础-OOP 面向对象编程

    OOP 面向对象编程 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构.强调的是具有某些特定功能的对象. 面向过程编程(Proced ...

  9. Java基础篇——面向对象编程

    ​ ​ 活动地址:CSDN21天学习挑战赛 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩:迟一天就多一天平庸的困扰.各位小伙伴,如果您: 想系统/深入学习某技术知识点- 一个人摸索学习很难坚持 ...

最新文章

  1. vtk相机_C#开发PACS医学影像三维重建(一)使用VTK重建3D影像
  2. navision系统和sap区别_(三)SAP On Premise和SAP S/4 HANA Cloud的区别
  3. JavaScript 判断 DOM 何时加载完毕
  4. 信息网络安全技术知识
  5. Java IO流操作规律
  6. su: user tomcat does not exist
  7. 论文浅尝 | BERT:Pre-training of Deep Bidirectional Transformers
  8. win7 蓝屏信息获取和处理
  9. scheduledexecutorservice 只执行一次_一个ScheduledExecutorService启动的Java线程无故挂掉引发的思考...
  10. numpy ndarry格式新增一行,将格式从(k,)变为(k,1)
  11. Linux学习笔记---使用BusyBox创建根文件系统(四)
  12. 牛客小白月赛13 解题报告
  13. Jmeter 时间函数工具汇总
  14. 批处理 Telnet 星球大战 话说我也清楚这是什么东东
  15. c语言中文解释,【资料】C语言错误信息中文解释
  16. 【无标题】FOC SDK电机库与STM32用串口指令使能电机开启关闭
  17. Linux 校准时间命令及其方法
  18. package.json文件的作用
  19. Linux从入门到精通二(Windows:你知道我的兄弟Linux吗?)
  20. 洛谷-P1107 [BJWC2008]雷涛的小猫

热门文章

  1. android源码查看源码的版本
  2. 标书中如何正确描述所用的统计学方法
  3. Stata 17 for Win 最新中文附详细安装教程
  4. SqlServer 增加字段,修改字段名,删除字段,修改字段默认值
  5. python中index函数_python中index函数的用法
  6. 机器人学习--智能移动机器人的有关技术演讲(浙大-熊蓉教授-2018年)
  7. 计算机视觉与深度学习 | 视觉SLAM详解及应用(中文版)
  8. HTML+CSS+JavaScript复习笔记持更(五)——CSS选择器
  9. wd2003计算机考试,2015计算机一级MsOffice练习:Word2003
  10. 温州大学瓯江学院 计算机院赛,温州大学