之前的文章我们介绍了 Java 的数组,本章我们来看一下 Java 的对象和类。

Java 是一种面向对象语言,那什么是对象呢,对象在编程语言中属于一个很宽泛的概念,我们可以认为万事万物都是对象,每个对象都有其状态和行为,例如一只狗会有颜色,品种,性别等状态,也有跑,吃,睡等行为。

在编程语言中,会用一个类来承载这个对象,类是一个模板,它描述一类对象的行为和状态。

在之前的文章中我们没有引入对象的概念,如果我们想要打印输出一个人的基本信息,如下:

 public class HelloWorld {
public static void main(String[] args) {
String name = "zhangsan";
int age = 18;
String gender = "男";
print(name,age,gender); // 姓名:zhangsan 年龄:18 性别:男
} static void print(String name, int age, String gender) {
System.out.print("姓名:"+ name);
System.out.print("年龄:"+ age);
System.out.print("性别:"+ gender);
}
}

上面其实是一个面向过程的编程,我们先定义一个 print 方法,分别传入姓名,年龄,性别,然后再分别打印输出,我们就可以定义变量,年龄,性别,调用该 print 方法来实现我们想要的功能。

其中有一个问题就是当我们需要再次输出另一个人的信息时,我们需要再次将 name,age,gender 传入,其实我们可以将这三个变量定义到一个对象中来使用,如下:

 public class HelloWorld {
public static void main(String[] args) {
Emp e = new Emp(); // 创建一个 Emp 对象
e.name = "zhangsan";
e.age = 18;
e.gender = "男";
print(e); // 姓名:zhangsan 年龄:18 性别:男
} static void print(Emp e) {
System.out.print("姓名:"+ e.name);
System.out.print("年龄:"+ e.age);
System.out.print("性别:"+ e.gender);
}
} class Emp{
String name;
int age;
String gender;
}

在上面的代码中,我们将 print 方法中传入的变量变成了一个 Emp 对象,Emp 对象是我们自己定义出来的,它和我们之前所讲的 Array 其实是一个道理:  arr = new int[5]; ,生成一个 5 个长度的数组。

在上面的代码中,我们定义的 print 方法其实作用就是用于输出打印我们需要的信息,我们同样也可以将其放到我们定义的 Emp 类中,如下:

 public class HelloWorld {
public static void main(String[] args) {
Emp e = new Emp(); // 创建一个 Emp 对象
e.name = "zhangsan";
e.age = 18;
e.gender = "男";
e.print(); // 姓名:zhangsan 年龄:18 性别:男
}
} class Emp {
String name;
int age;
String gender; void print() {
System.out.print("姓名:" + name);
System.out.print("年龄:" + age);
System.out.print("性别:" + gender);
}
}

至此我们其实就已经果果面向对象的思维定义了一个类,当我们需要再定义另一个人的信息时,直接调用该对象的属性和方法就可以了。

在我们初学编程语言的时候,都是由面向过程慢慢开始的深入到面向对象的,但面向过程由很多缺点,如下:

1、缺乏对数据的封装

2、数据和方法分离了

如上面的例子中最开始我们需要什么数据都是先自己定义,数据 name age gende 和方法 print 是分开的,后来我们改为统一到一个 Emp 类中,这样就做到了数据和方法的统一。

我们接下来看下面的代码:

 public class HelloWorld {
public static void main(String[] args) {
Emp e = new Emp(); // 创建一个 Emp 对象
e.print(); // 姓名:null 年龄:0 性别:null
}
} class Emp {
String name;
int age;
String gender; void print() {
System.out.print("姓名:" + name);
System.out.print("年龄:" + age);
System.out.print("性别:" + gender);
}
}

在创建 Emp 对象后,我们并没有对类的 name age 和 gender 进行赋值,直接调用 print() 方法,结果并没有出现编译错误,这是由于在我们定义一个变量的时候,java 会为我们提供一个默认的值,字符串为 null,数字为 0。

Java 从入门到进阶之路(六)的更多相关文章

  1. Java 从入门到进阶之路(十六)

    在之前的文章我们介绍了一下 Java 中类的多态,本章我们来看一下 Java 中类的内部类. 在 Java 中,内部类分为成员内部类和匿名内部类. 我们先来看一下成员内部类: 1.类中套类,外面的叫外 ...

  2. Java 从入门到进阶之路(二十六)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 的子接口 List,本章我们来看一下 Java 集合框架中的Collection 的子接口 Queue. 在之前我们讲 ...

  3. Java 从入门到进阶之路(二十)

    在之前的文章我们介绍了一下 Java 中的包装类,本章我们来看一下 Java 中的日期操作. 在我们日常编程中,日期使我们非常常用的一个操作,比如读写日期,输出日志等,那接下来我们就看一下 Java ...

  4. Java 从入门到进阶之路(二十五)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 的子接口 List的 增删改查和与数组间相互转换的方法,本章我们来看一下 Java 集合框架中的Collection 的 ...

  5. Java 从入门到进阶之路(一)

    写在前面:从本片文章开始,将记录自己学习 Java 的点滴路程,目标定的并不是让自己成为一个 Java 高手,而是让自己多掌握一门语言,使自己的知识面更广一些,在学习 Java 的过程中如有不对的地方 ...

  6. Java 从入门到进阶之路(二)

    之前的文章我们介绍了一下用 IDEA 编辑器创建一个 Java 项目并输出 HelloWorld,本章我们来看一下 Java 中的变量和基本数据类型. 在这之前我们先来看一下 Java 中的关键字,这 ...

  7. Java 从入门到进阶之路(三)

    之前的文章我们介绍了 Java 中的变量和基本数据类型,本章我们来看一下 Java 的运算符和表达式. 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操 ...

  8. Java 从入门到进阶之路(四)

    之前的文章我们介绍了 Java 的运算符和表达式,本章我们来看一下 Java 的循环结构. 循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似语句被有规律的重复性进行. 循环的 ...

  9. Java 从入门到进阶之路(五)

    之前的文章我们介绍了 Java 的循环结构,本章我们来看一下 Java 的数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. 数组 - 相同数据类型的元 ...

随机推荐

  1. 如何配置sigar在Linux和Windows下使用java语言获得各种系统信息

    转自:https://blog.csdn.net/qq_27093465/article/details/70227619

  2. Nginx反向服务器搭建

    Nginx环境搭建 下载解压Nginx源码包 可以通过已有的压缩包 这里也可以通过yum的在线下载 wget http://nginx.org/download/nginx-1.13.7.tar.gz ...

  3. SpringCloud(二)- 服务注册与发现Eureka

    离上一篇微服务的基本概念已经过去了几个月,在写那篇博客之前,自己还并未真正的使用微服务架构,很多理解还存在概念上.后面换了公司,新公司既用了SpringCloud也用了Dubbo+Zookeeper, ...

  4. NLP(十七) 利用DNN对Email分类

    数据集 scikit-learn中20个新闻组,总邮件18846,训练集11314,测试集7532,类别20 from sklearn.datasets import fetch_20newsgrou ...

  5. 2019nc#6

    https://ac.nowcoder.com/acm/contest/886#question 题号 标题 已通过代码 题解/讨论 通过率 团队的状态 A Garbage Classificatio ...

  6. Codeforces-450D-Jzzhu and Cities+dji

    参考:https://blog.csdn.net/corncsd/article/details/38235973 传送门:http://codeforces.com/problemset/probl ...

  7. 2017 ACM/ICPC Asia Regional Qingdao Online 1003 The Dominator of Strings hdu 6208

    The Dominator of Strings Time Limit: 3000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java ...

  8. POJ 1390 Blocks (区间DP) 题解

    题意 t组数据,每组数据有n个方块,给出它们的颜色,每次消去的得分为相同颜色块个数的平方(要求连续),求最大得分. 首先看到这题我们发现我们要把大块尽可能放在一起才会有最大收益,我们要将相同颜色块合在 ...

  9. 《Hive编程指南》读书笔记 | 一文看懂Hive的数据类型和文件格式

    Hive支持关系型数据库中的大多数基本数据类型,同时也支持关系型数据库中很少出现的3种集合数据类型. 和大多数数据库相比,Hive具有一个独特的功能,那就是其对于数据在文件中的编码方式具有非常大的灵活 ...

  10. Erlang 不同版本内容

    OTP 22.0 Erlang/OTP 22是一个新的主要版本,具有新的特性和改进,同时也具有不兼容性. 要更深入地了解OTP 22发行版的亮点,您可以阅读我们的博客: http://blog.erl ...