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 ...
随机推荐
- 20162325 金立清 S2 W7 C16
20162325 2017-2018-2 <程序设计与数据结构>第7周学习总结 教材学习内容概要 树是非线性结构,其元素组织为一个层次结构 树的度表示树种任意结点的最大子结点数 有m个元素 ...
- YQCB冲刺第二周第一天
今天的任务为实现查看消费明细的功能. 遇到的问题是按类别显示. 站立会议为: 任务面板为:
- 一个简单的加减乘除自动生成小程序升级版(JAVA)
import java.util.Scanner; public class Suan { public static void main(String[] args) { int []b;//设置数 ...
- js获取浏览器窗口属性
网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offset ...
- 由一个滑动条的任务需求产生一个对UISlider控件的探讨
任务需求样式:
- Objective-C UIWebView添加脚视图
- (void)addObserverForWebViewContentSize{ [self.webView.scrollView addObserver:self forKeyPath: cont ...
- c++的继承方式
c++的继承,因为学完过的时间太长,忘了,现在再温习一下. c++的继承方式 1. 公有继承(public) 2. 私有继承(private) 3. 保护继承(protected) 从一个基类派生的继 ...
- [转帖]Oracle字符集的查看与修改 --- 还未尝试 找个周六 试试.
Oracle 字符集的查看和修改 感谢原作者 改天试试 https://www.cnblogs.com/rootq/articles/2049324.html 一.什么是Oracle字符集 Oracl ...
- SQLSERVER STANDARD 版本不支持内存数据库
1. 自己负责的一个环境 安装了 SQLSERVER2014 的 标准版 发现有问题. 恢复了一个带内存数据库的性能测试库之后报错. 报错信息很不明了,但是 查了半天发现必须升级企业版才可以... 还 ...
- 数据库性能优化之SQL语句优化(下)
(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最 ...