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.对象用完之后就变成垃圾内存,可以被垃圾回收器回收