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)的更多相关文章

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

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

  2. Python学习札记(三十) 面向对象编程 Object Oriented Program 1

    参考:OOP NOTE 1.面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. ...

  3. java基础——初识面向对象

    面向对象 面向过程&面向对象 面向过程思想 步骤请简单:第一步做什么,第一步做什么 面向过程适合处理一些较为简单的东西 面向对象思想 物以类聚,分类的思维模式,思考的问题首先会解决问题需要哪些 ...

  4. Python学习札记(三十三) 面向对象编程 Object Oriented Program 4

    参考:继承和多态 NOTE 著名的开闭原则: 对扩展开放:允许新增Animal子类: 对修改封闭:不需要修改依赖Animal类型的Animal_func()等函数. 1.eg. #!/usr/bin/ ...

  5. Python学习札记(四十) 面向对象编程 Object Oriented Program 11

    参考:使用元类 NOTE: type() 1.type()函数可以用于检查一个类或者变量的类型. #!/usr/bin/env python3 class Myclass(object): " ...

  6. Python学习札记(三十八) 面向对象编程 Object Oriented Program 9

    参考:多重继承 NOTE #!/usr/bin/env python3 class Animal(object): def __init__(self, name): self.name = name ...

  7. Python学习札记(三十七) 面向对象编程 Object Oriented Program 8 @property

    参考:@property NOTE 1.在绑定参数时,为了避免对属性不符合逻辑的操作,需要对传入的参数进行审核. #!/usr/bin/env python3 class MyClass(object ...

  8. Python学习札记(三十六) 面向对象编程 Object Oriented Program 7 __slots__

    参考:slots NOTE 1.动态语言灵活绑定属性及方法. #!/usr/bin/env python3 class MyClass(object): def __init__(self): pas ...

  9. Python学习札记(三十五) 面向对象编程 Object Oriented Program 6

    参考:实例属性和类属性 NOTE Python是动态语言,根据类创建的实例可以任意绑定属性. class Student(object): def __init__(self, name): self ...

随机推荐

  1. 面向对象OO第5-7次作业总结

    面向对象OO第5-7次作业总结 学习OO七周了,深切的感受到了这门课程的不友好.前三次作业能够算是勉强地通过了,但是从第五次作业开始就完全GG了.这三次作业,从多线程电梯开始,然后文件监控,然后到出租 ...

  2. 迎来OO的曙光,总结规格的意义——OO第四次博客总结

    一切都要结束了,砥砺前行~ 一.测试与正确性论证的效果差异 测试,顾名思义就是我们暴力用大量数据轰炸编写的程序的过程.日常的OO过程中,我们经常互相寻求“测试集”,正是因为测试使用特定数据对我们的功能 ...

  3. 乱码之UTF-8 &GBK

    在提交JSP时对于乱码问题,首先我们要搞清楚为什么会出现乱码? 看JSP的头文件:<%@ page contentType="text/html;charset=UTF-8" ...

  4. 14_Java面向对象_第14天(Eclipse高级、类与接口作为参数返回值)_讲义

    今日内容介绍 1.Eclipse常用快捷键操作 2.Eclipse文档注释导出帮助文档 3.Eclipse项目的jar包导出与使用jar包 4.不同修饰符混合使用细节 5.辨析何时定义变量为成员变量 ...

  5. Docker基础教程

    一.Docker是什么? KVM, Virtualbox, Vmware是虚拟出机器,让每个实例看到一个单独的机器:而Docker是虚拟出操作系统,实现应用之间的隔离,让各个应用觉得自己有一个自己的操 ...

  6. EasyUi模糊匹配搜索框combobox

    现在项目当中很多已经应用了Jquery-easyUi这个界面框架了,所以,学习一点easyUI的常用工具就显得很重要了,现在介绍的就是我在项目中用到的easyUi的模糊匹配组合框combobox. c ...

  7. 深入理解Java类加载器(1)

    类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制 ...

  8. A网站访问B网站,跨域问题

    跨域异常:XMLHttpRequest cannot load  ''. No 'Access-Control-Allow-Origin' header is present on the reque ...

  9. Delphi 判断TImage是否为空及注意事项

    Delphi 判断TImage是否为空:1)非空 Image1.Picture.Graphic <> nil2)为空 Image1.Picture.Graphic = nil注意不能用Im ...

  10. exFAT移动硬盘写保护怎么去掉

    cmd命令提示符下运行chkdsk命令: 比如在E盘,则输入的命令如下: E:(冒号不可少,输入后回车) CHKDSK /F /X  (回车) 等命令执行完了,即可去掉exFAT移动硬盘写的保护.