6.1面向对象的概述
在程序开发初期,人们使用结构化开发语言。随着软件的规模越来越庞大,结构化语言的弊端也逐渐暴露出来,开发周期越来越长,产品的质量也不尽如人意。
6.1.1对象:
(1)从这一问题中抽象出对象,这里抽象出的对象为大雁
(2)识别这个对象的属性。对象具备的属性都是静态属性,如大雁有一对翅膀,黑色的羽毛等。
(3)识别这个对象的动态行为,即这只大雁可以进行的动作,如飞行,觅食等,这些行为都是这个对象基于其属性而具有的动作。
(4)识别出这个对象的属性和行为后,这个对象就被定义完成了。然后可以根据这只大雁具有的特性制定这只大雁从北方飞向南方的具体方案。
6.1.2 类:
类就是同一类事物的统称,如果将现实世界中的一个抽象成对象,类就是这类对象的统称,在Java语言中,类对象的行为是以方法的形容来定义的,对象的属性是以成员变量的形式定义的,所以类包括对象的属性和方法。
6.1.3 封装:
面向对象程序设计具有以下特点:封装性,继承性和多态性;(1)封装是面对对象编程的核心思想,将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏其实现细节,这就是封装思想,(2)采用封装的思想保证了类内部数据结构的完整性,使用类的用户不能轻易的直接操作类的数据结构,只能执行类允许公开的数据
6.1.4 继承:
(1)类与类之间具有关系,这种关系被称为关联。关联主要描述两个类之间的一般二元关系。(2)继承性主要利用特定对象之间的共同属性。
6.1.5 多态:
继承,父类和子类,其实将父类对象应用于子类的特征就是多态。
6.2 类:
类是封装对象的属性和行为的载体,而在Java语言中对象的属性以及成员变量的形式存在,对象方法以成员方法的形式存在。
6.2.1 成员变量:
在Java中,对象的属性也称为成员变量,成员变量可以任意类型,整个类中均是成员变量作用范围。
public class Book
private String name;//string类型的成员变量
public String getName() {//name的getter方法
return name;
}
public void setName(String name) {//name的setter方法
this.name=name;//将参数值赋予类中的成员变量
}
}
6.2.2 成员方法:
一个成员方法可以有参数,这个参数可以是对象,也可以是基本数据类型的变量,同时成员方法有返回值和不返回值的选择,如果方法需要返回值,可以在方法中使用retnrn关键字,使用这个关键字后,方法的执行将被终止。
6.2.3 权限修饰符:
public和protected修饰的类可以由子类访问,如果子类和父类不在同一包中,那么只有修饰符为public的类可以被子类进行访问。如果父类不通过继承产生的子类访问它的成员变量,那么必须使用private声明父类这个成员变量。
![](https://i-blog.csdnimg.cn/blog_migrate/c0d321f1c022dc879a92b98af293f89a.jpeg)
6.2.4 局部变量:
局部变量是在方法被执行时创建的,在方法执行结束时被销毁。局部变量在使用时必须进行赋值操作或被初始化,否则会出现编译错误。
public class ChangeDemo{
public static int[]exchange(int[]arr){
int tmp =arr[0];//创建局部变量tmp,保存数组第一个元素的值
arr[0]=arr[1];//第二个元素赋值给第一个元素
arr[1]=tmp;//第二个元素值改为tmp
return arr;
}
public static void main(String[]args) {
int arr[]= {17,29};
System.out.println("第一个值="+arr[0]+",第二个值="+arr[1]);
arr =exchange(arr);
System.out.println("第一个值="+arr[0]+",第二个值="+arr[1]);
}
}
结果;
![](https://i-blog.csdnimg.cn/blog_migrate/1851e7fff625556712ae26651604d481.png)
6.2.5 局部变量的有效范围:
(1)可以将局部变量的有效范围称为变量的作用域,局部变量的有效范围从该变量的声明开始到该变量的结束为止。
(2)在相互不嵌套的作用域中可以同时声明两个名称和类型相同的局部变量。
(3)但是在相互嵌套的区域中不可以这样声明,如果中局部变量id在方法体的for循环中再次定义,编译器将会报错。
6.2.6 this关键字:
this关键字用于表示本 类当前对象,当前对象不是某个new出来的实体对象,而是当前正在编辑的类。
6.3 类的构造方法:
在类中,除成员方法外,还存在一种特殊类型的方法,那就是构造方法,构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的。每当类实例化一个对象时,类都会自动调整用构造方法。
public class EggCake{
int eggCount; //鸡蛋灌饼里蛋的个数
public EggCake(int eggCount) {//参数为鸡蛋灌饼里蛋的个数的构造方法
this.eggCount=eggCount;//将参数eggcount的值赋给属性eggcount
}
public EggCake(){//无参数构造方法,默认给饼加一个蛋
//调用参数为鸡蛋灌饼里蛋的个数的构造方法,并设置鸡蛋灌饼里蛋的个数为1
this(1);
}
public static void main(String[]args) {
EggCake cake1=new EggCake();
System.out.println("顾客不要求加蛋的数量,饼里会有"+cake1.eggCount+"个蛋。");
EggCake cake2=new EggCake(2);
System.out.println("顾客要求加2个蛋,饼里会有"+cake2.eggCount+"个蛋。");
}
}
结果:
![](https://i-blog.csdnimg.cn/blog_migrate/197ea14914564115043c33e75569bf2b.png)
6.4 静态变量和静态方法:
由static修饰的变量和方法被称为静态变量和静态方法,有时在处理问题时会需要两个类在同一内存区域共享一个数据,被声明为static的变量和方法被称为静态变量。静态成员属于类所有,区别于个别对象,可以在本类或其他类使用类名和“.”运算符调用静态成员。
public class sit {
static double PI = 3.1415;//在类中定义静态变量
public static void method() {//在类中定义静态方法
System.out.println("这是静态方法");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(sit.PI);//调用静态变量
sit.method();//调用静态方法
}
}
结果:
![](https://i-blog.csdnimg.cn/blog_migrate/94f08f9b3b697a56c765e6890dd0a6c9.png)
public class three {
static int count =0;
String name;
public three(String name) {
this.name = name;
count++;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
three c1 =new three("tom");
System.out.println("我是第"+three.count+"名顾客,我叫"+c1.name);
three c2 =new three("张三");
System.out.println("我是第"+three.count+"名顾客,我叫"+c2.name);
three c3 =new three("狗蛋儿");
System.out.println("我是第"+three.count+"名顾客,我叫"+c3.name);
}
}
结果:
![](https://i-blog.csdnimg.cn/blog_migrate/697848b5f1495765263a349690e55c4f.png)
6.5 类的主方法:
主方法是类的入口点,它定义了程序从何处开始,主方法提供对程序流向的控制,Java编译器通过主方法来执行程序。
public static void main(String[] args) {//传入参数
// TODO Auto-generated method stub
for(int i=0;i<args.length;i++) {
System.out.println(args[i]);//输出参数
}
}
}
结果:
![](https://i-blog.csdnimg.cn/blog_migrate/b3ba0d6923a13c088ead3ed3f3ad41b0.png)
6.6 对象 :
Java是一门面向对象的程序设计语言,对象是由类实例化而来的,所有问题都通过对象来处理。对象可以通过操作类的属性和方法来解决相应的问题,所以了解对象的产生,操作和消亡是十分必要的。
对象:现实世界中,随处可见的一种事物就是对象(世间万物皆对象)
6.6.1 对象的创建:
对象可以认为是在一类事物中抽象出某个特例,可以通过这个特例来处理这类事物出现的问题。在Java语言中,通过new操作符来创建对象。
6.6.2 访问对象的属性和行为:
用户使用new操作符创建一个对象后,可以使用“对象.类成员”来获取对象的属性和行为。对象的属性和行为在类中是通过类的成员变量和成员方法来表示的,所以当对象获得类成员时,也相应的获取了对象的属性和行为。
6.6.3 对象的引用:
在Java语言中,尽管一切都可以看作对象,但真正的操作标识符实质上是一个引用。通常一个引用不一定需要有一个对象相关联。
6.6.4 对象的销毁:
每个对象都有声明周期,当对象的生命周期结束时,分配给该对象的内存地址需要被回收,在其他语言中,需要用户手动回收废弃的对象,Java拥有一套完整的垃圾回收机制,用户不必担心废弃的对象占用内存,垃圾回收器会自动回收无用却占用内存的资源。
题目
![](https://i-blog.csdnimg.cn/blog_migrate/906e1faef61bf19a229bbfc7bb315e5b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5ad61abd611dadd1763b78353ece3140.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ce000dead52c6e133721cc2eb2565da5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8159f03a8aebd95675e2c1ca9414969a.png)
代码:
public class dog {
private String gender;//私有成员变量
private String name;//私有成员变量
private String color;//私有成员变量
private String sound;//私有成员变量
//对外提供getter和setter方法
public String getAge() {
return gender;
}
public void setAge(String age) {
this.gender = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getSound() {
return sound;
}
public void setSound(String sound) {
this.sound = sound;
}
//成员方法:自我介绍 方法名: introduce 传入参数为空 返回参数“X狗XX是X色的
public String introduce() {
return name+gender+color+"色";
}
public String bark() {
return color+"的"+name+"正是"+sound+gender;
}
//构造方法 无惨
public dog() {
}
//构造方法 三个参数 性别 名字 颜色
public dog(String gender,String name,String color) {
this.gender=gender;
this.name=name;
this.color=color;
}
//构造方法 四个参数 性别 名字 颜色 叫声
public dog(String color,String name,String sound,String gender) {
this.gender =gender;
this.name =name;
this.color=color;
this.sound=sound;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
dog dog1=new dog("公","哈士奇","黑白");//调用构造方法并写入三个参数
String a=dog1.introduce();//调用成员方法
System.out.println(a);//输出a的值
dog dog2=new dog("黑白色","哈士奇","狗叫","公狗");//调用构造方法
String b=dog2.bark();//调用成员方法
System.out.println(b);//输出b值
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/5dd2609712c9c5d3cf552ecf37617294.png)
结果:
![](https://i-blog.csdnimg.cn/blog_migrate/c2f9d677d9e79ef151399e9df52315c2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/909652100b3f598a746cf5ecda4fa9ff.png)