Java基础-初识面向对象编程(Object-Oriented-Programming)
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类如下:
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ public class Person{
String name;
String gender; //性别
int height;
String personID; //身份证号码 public void eat(Person p){
System.out.printf("%s需要吃饭!\n",p.name);
} public void drink(Person p){
System.out.format("%s需要喝水!\n",p.name);
} }
2>.创建对象
如何创建对象呢?其实很简单,格式为:“类名 对象名 = new 类名();”。我们上面一定定义了一个Person类,那么我们就可以把定义的类拿来创建一个Person对象。
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ public class PersonDemo{
public static void main(String[] args){
//第一步,创建对象
Person p1 = new Person();
/**
* 1>.Person是一个类名,在Java中,类是一种引用数据类型,Person是一个数据类型
* 2>.P1是对象名,实际上就是Person这个类型定义的变量名;
* 3>.给p1这个对象进行赋值时,"new Person()"的返回值赋值给P1变量;
* 4>.new 运算符会在堆区中分配一块存储空间,把这块存储空间的起始地址赋值给变量p1;
* 5>.p1 变量中保存的是堆中内存的一个地址(引用)
*/ //第二步,类创建了对象之后,对象就可以通过成员运算符(.)访问它的属性和方法
p1.name = "尹正杰";
p1.gender = "男";
p1.height = 175;
p1.personID = "1100201804085280";
System.out.printf("姓名:%s,年龄:%s,身高:%d,身份证号码:%s\n",p1.name,p1.gender,p1.height,p1.personID);
p1.eat(p1);
p1.drink(p1);
}
}
3>.案例展示
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ public class Dog{
String nickname;
String gender;
int age;
String varieties; //品种 public void showInfo(){
System.out.println("以下是狗狗的信息:");
System.out.printf("狗狗的名字是:%s\n",nickname);
System.out.printf("狗狗的性别是:%s\n",gender);
System.out.printf("狗狗的年龄是:%s\n",age);
System.out.printf("狗狗的品种是:%s\n",varieties);
} public void bark(){
System.out.println("汪汪汪~");
} public void eat(){
System.out.println("狗狗喜欢吃肉肉~");
shake(); //在类的一个成员方法中,可以调用另外的成员方法。
} public void guard(){
System.out.println("狗狗在看门,生人勿进!");
shake();
} public void shake(){
System.out.println("狗狗在摇尾巴");
}
}
上面我们定义了一个Dog类,我们接下来我们可以调用一下我们定义的类,代码如下:
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ public class DogDemo{
public static void main(String[] args){
Dog myDog = new Dog();
myDog.age = 3;
myDog.gender = "公的";
myDog.nickname = "二狗子";
myDog.varieties = "哈士奇"; myDog.showInfo();
myDog.guard();
myDog.eat();
}
}
五.类定义成员变量默认初始化
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ public class Person{
/**
* 在定义类时,可以给成员变量赋初值,类创建了对象,如果没有给对
*象的这个成员变量赋值,这个成员变量的值就是在定义时赋的初始值。
*/
String name;
String gender; //性别
int age;
String country = "中国"; //定义变量时,可以赋初值。
boolean isMarried; //是都已婚 public void showInfo(){
System.out.printf("姓名:%s\n",name);
System.out.printf("性别:%s\n",gender);
System.out.printf("年龄:%s\n",age);
System.out.printf("国籍:%s\n",country);
System.out.printf("婚否:%s\n",isMarried);
}
}
通过类定义了对象,如果不给对象的各个变量赋值,对象的各个成员变量会进行默认的初始化,如:
1>.数值性,数据默认初始化为0;
2>.字符类型默认初始化为码值为0的字符;
3>.布尔类型默认初始化为false;
4>.引用数据类型默认初始化为null;
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ public class PersonDemo{
public static void main(String[] args){
Person p1 = new Person();
p1.showInfo(); Person p2 = new Person();
p2.country = "美国";
p2.showInfo();
}
}
六.自定义类的内存图
1>.Phone.java文件内容
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ public class Phone{
/*
要求:
使用Java中的类,描述生活中的手机这个事物。
*/
String color;
String brand;
double size;
}
2>.PhoneDemo.java文件内容
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ public class PhoneDemo{
public static void main(String[] args){
Phone p = new Phone(); p.color = "土豪金"; p.brand = "IPhone 8 puls"; p.size = 5.5; System.out.println("颜色:" + p.color+ "品牌: " + p.brand + "尺寸大小:" + p.size ); }
}
3>.自定义类型内存图
别看上面就几行代码,但是运行机制我们还是得了解的,下面我简要画一下图,以便记忆:
七.类定义使用自定义类型定义成员变量
其实,我们可以模拟生产小汽车为例,来说明一下用自定义类型定义成员变量,分为三个文件:Engine.java,Car.java以及CarDemo.java文件。
1>.Engine.java文件内容如下:
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ public class Engine{
double displacement; //排量
int powerSize; //功率 public void start(){
System.out.println("发动机点火");
} public void stop(){
System.out.println("发动机熄火");
}
}
2>.Car.java文件内容如下:
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ public class Car{
String carBrand; //汽车品牌
int price; //汽车价格
String color; //汽车颜色
String motorcycleType; //车型
double oilConsumption; //油耗 Engine carEngine; //发动机
/**
* 注意,Engine是我们定义的类,也就是说我们可以使用自定义的类型来定义成员变量。
*/ public void start(){
System.out.println("小汽车启动,实际上是发动机点火!");
carEngine.start();
} public void stop(){
System.out.println("小汽车停止,实际上是发动机熄火!");
carEngine.stop();
} public void showInfo(){
System.out.println("汽车信息如下:");
System.out.format("汽车品牌:%s\n",carBrand);
System.out.format("汽车价格:%s\n",price);
System.out.format("汽车颜色:%s\n",color);
System.out.format("车型:%s\n",motorcycleType);
System.out.format("油耗:%s\n",oilConsumption);
//排量和功率是发动机的排量和功率。
System.out.format("排量:%s\n",carEngine.displacement);
System.out.format("功率:%s\n",carEngine.powerSize);
}
}
3>.CarDemo.java文件内容如下:
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ public class CarDemo{
public static void main(String[] args){
//创建小汽车对象,也可以说是生成了一台小汽车
Car car1 = new Car(); car1.carBrand = "Benz"; //相当于贴标签
car1.price = 130; //喷漆
car1.color = "red"; //相当于喷漆
car1.motorcycleType = "SUV"; //设置类型
car1.oilConsumption = 15; //标注油耗 Engine engine1 = new Engine(); //先生成一台发动机
engine1.displacement = 6.0;
engine1.powerSize = 480;
car1.carEngine = engine1; //相当于把发动机装配到小汽车上
car1.showInfo(); car1.start();
car1.stop();
}
}
八.匿名对象(Anonymous Object)
匿名对象是对象的简化形式
匿名对象两种使用情况
1.对象方法仅进行一次调用时,多次调用不适合
2.匿名对象可以作为实际参数进行传递
使用匿名对象的好处
6 1.简化写法,不必定义变量接住对象引用
7 2.对象用完之后就变成垃圾内存,可以被垃圾回收器回收
Java基础-初识面向对象编程(Object-Oriented-Programming)的更多相关文章
- python, 面向对象编程Object Oriented Programming(OOP)
把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数 ...
- Python学习札记(三十) 面向对象编程 Object Oriented Program 1
参考:OOP NOTE 1.面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. ...
- java基础——初识面向对象
面向对象 面向过程&面向对象 面向过程思想 步骤请简单:第一步做什么,第一步做什么 面向过程适合处理一些较为简单的东西 面向对象思想 物以类聚,分类的思维模式,思考的问题首先会解决问题需要哪些 ...
- Python学习札记(三十三) 面向对象编程 Object Oriented Program 4
参考:继承和多态 NOTE 著名的开闭原则: 对扩展开放:允许新增Animal子类: 对修改封闭:不需要修改依赖Animal类型的Animal_func()等函数. 1.eg. #!/usr/bin/ ...
- Python学习札记(四十) 面向对象编程 Object Oriented Program 11
参考:使用元类 NOTE: type() 1.type()函数可以用于检查一个类或者变量的类型. #!/usr/bin/env python3 class Myclass(object): " ...
- Python学习札记(三十八) 面向对象编程 Object Oriented Program 9
参考:多重继承 NOTE #!/usr/bin/env python3 class Animal(object): def __init__(self, name): self.name = name ...
- Python学习札记(三十七) 面向对象编程 Object Oriented Program 8 @property
参考:@property NOTE 1.在绑定参数时,为了避免对属性不符合逻辑的操作,需要对传入的参数进行审核. #!/usr/bin/env python3 class MyClass(object ...
- Python学习札记(三十六) 面向对象编程 Object Oriented Program 7 __slots__
参考:slots NOTE 1.动态语言灵活绑定属性及方法. #!/usr/bin/env python3 class MyClass(object): def __init__(self): pas ...
- Python学习札记(三十五) 面向对象编程 Object Oriented Program 6
参考:实例属性和类属性 NOTE Python是动态语言,根据类创建的实例可以任意绑定属性. class Student(object): def __init__(self, name): self ...
随机推荐
- HTML基础学习总结
一.HTML的一些基本描述 全称:Hyper Text Markup Language 定义:超文本标记语言,是标记语言而不是编程语言,使用标记标签来描述网页,所以也被称为网页 格式:标签对里面放纯文 ...
- 第五周作业总结(内含用Junit测试ArrayStack和LinkedStack课堂练习报告)
---恢复内容开始--- 学号 20162310<程序设计与数据结构>第五周学习总结 教材学习内容总结 集合分为线性集合(集合中的元素排成一行)和非线性集合(按不同于一行的方式来组织元素, ...
- Leetcode题库——4.寻找两个有序数组的中位数
@author: ZZQ @software: PyCharm @file: findMedianSortedArrays.py @time: 2018/10/10 19:24 说明:给定两个大小为 ...
- GIT的使用及心得
先给大家个很棒的GIT使用教程链接http://blog.jobbole.com/78960/ 这个链接是我在学习使用GIT时看的教程博客,分享给大家,里面还有介绍SVN与GIT的区别 GITHUB上 ...
- iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件上传
官方建议AFN的使用方法 0.导入框架准备工作 •1. 将AFNetworking3.0+框架程序拖拽进项目 •2. 或使用Cocopod 导入AFNetworking3.0+ •3. 引入 ...
- Sprint2-2.0
1.开始一个新的冲刺: 起止:2016.6.1~2016.6.14 按照以下过程进行 ProductBacklog:继续向下细化 Sprint 计划会议:确定此次冲刺要完成的目标 Sprint Bac ...
- 《构建之法》第8,9,10章读后感&sprint1个人总结
第8章 这一章主要介绍需求分析.具体说明了软件需求的类型.利益相关者,获取用户需求分析的常用方法与步骤.竞争性需求分析的框架NABCD,四象限方法以及项目计划和估计的技术.需求分析是决定一个软件的使用 ...
- PAT 甲级 1154 Vertex Coloring
https://pintia.cn/problem-sets/994805342720868352/problems/1071785301894295552 A proper vertex color ...
- mysql group by分组查询
分组的SQL语句有2个: group by 和分组聚合函数实现 partition by (oracle和postgreSQL中的语句)功能 group by + having 组合赛选数据 注意:h ...
- Mysql高并发情况下的解决方案(转)
查询了下Mysql 关于高并发的处理的资料,在这记录一下. 高并发大多的瓶颈在后台数据逻辑处理,在存储,mysql的正常的优化方案如下: 1.代码中sql语句优化 2.数据库字段优化,索引优化 3.加 ...