Java 从入门到进阶之路(六)
之前的文章我们介绍了 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 从入门到进阶之路(六)的更多相关文章
- Java 从入门到进阶之路(十六)
在之前的文章我们介绍了一下 Java 中类的多态,本章我们来看一下 Java 中类的内部类. 在 Java 中,内部类分为成员内部类和匿名内部类. 我们先来看一下成员内部类: 1.类中套类,外面的叫外 ...
- Java 从入门到进阶之路(二十六)
在之前的文章我们介绍了一下 Java 中的 集合框架中的Collection 的子接口 List,本章我们来看一下 Java 集合框架中的Collection 的子接口 Queue. 在之前我们讲 ...
- Java 从入门到进阶之路(二十)
在之前的文章我们介绍了一下 Java 中的包装类,本章我们来看一下 Java 中的日期操作. 在我们日常编程中,日期使我们非常常用的一个操作,比如读写日期,输出日志等,那接下来我们就看一下 Java ...
- Java 从入门到进阶之路(二十五)
在之前的文章我们介绍了一下 Java 中的 集合框架中的Collection 的子接口 List的 增删改查和与数组间相互转换的方法,本章我们来看一下 Java 集合框架中的Collection 的 ...
- Java 从入门到进阶之路(一)
写在前面:从本片文章开始,将记录自己学习 Java 的点滴路程,目标定的并不是让自己成为一个 Java 高手,而是让自己多掌握一门语言,使自己的知识面更广一些,在学习 Java 的过程中如有不对的地方 ...
- Java 从入门到进阶之路(二)
之前的文章我们介绍了一下用 IDEA 编辑器创建一个 Java 项目并输出 HelloWorld,本章我们来看一下 Java 中的变量和基本数据类型. 在这之前我们先来看一下 Java 中的关键字,这 ...
- Java 从入门到进阶之路(三)
之前的文章我们介绍了 Java 中的变量和基本数据类型,本章我们来看一下 Java 的运算符和表达式. 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操 ...
- Java 从入门到进阶之路(四)
之前的文章我们介绍了 Java 的运算符和表达式,本章我们来看一下 Java 的循环结构. 循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似语句被有规律的重复性进行. 循环的 ...
- Java 从入门到进阶之路(五)
之前的文章我们介绍了 Java 的循环结构,本章我们来看一下 Java 的数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. 数组 - 相同数据类型的元 ...
随机推荐
- HBase 系列(八)——HBase 协处理器
一.简述 在使用 HBase 时,如果你的数据量达到了数十亿行或数百万列,此时能否在查询中返回大量数据将受制于网络的带宽,即便网络状况允许,但是客户端的计算处理也未必能够满足要求.在这种情况下,协处理 ...
- CentOS -- Redis 3.2.12 Standalone Install and Configuration
1 Tune OS setting echo never > /sys/kernel/mm/transparent_hugepage/enabled echo "vm.overcom ...
- HDU 6052
题意略. 思路:我们单独考虑每种颜色的贡献,颜色c对答案的贡献 == 含有c的矩形个数,这就是在考查我们计数的能力,暴力可过. #include<bits/stdc++.h> #defin ...
- JNI开发流程
交叉编译 在一个平台上去编译另一个平台上可以执行的本地代码 cpu平台 arm x86 mips 操作系统平台 windows linux mac os 原理 模拟不同平台的特性去编译代码 jni开发 ...
- Leetcode之深度优先搜索&回溯专题-491. 递增子序列(Increasing Subsequences)
Leetcode之深度优先搜索&回溯专题-491. 递增子序列(Increasing Subsequences) 深度优先搜索的解题详细介绍,点击 给定一个整型数组, 你的任务是找到所有该数组 ...
- Delphi - Indy 创建邮件自动发送服务
服务器自动邮件线程 功能:此程序主要实现对Oracle数据库表tableName(存放需要发送邮件的相关信息)里面相关信息的邮件发送. 优点:开发人员可以直接再数据库后台对tableName表进行插入 ...
- 深度学习常见的优化方法(Optimizer)总结:Adam,SGD,Momentum,AdaGard等
机器学习的常见优化方法在最近的学习中经常遇到,但是还是不够精通.将自己的学习记录下来,以备不时之需 基础知识: 机器学习几乎所有的算法都要利用损失函数 lossfunction 来检验算法模型的优劣, ...
- JMeter特点&性能测试工具选型的原则&模拟压力的原理
1.JMeter自身的特点 1)开源.轻量级.更适合自动化和持续集成(100M左右,LoadRunner 4G左右) 2)学习难度大 3)资料少.全英文 2. 性能测试工具选型的原则 1)成本 a.工 ...
- Special Judge Ⅱ
Problem Description Q:什么是 Special Judge,Special Judge 的题目有什么不同? A:一个题目可以接受多种正确答案,即有多组解的时候,题目就必须被 Spe ...
- spring boot使用guava缓存
1.pom中插入依赖: <!--guava缓存cache--> <dependency> <groupId>com.google.guava</groupId ...