龙空技术网

初识Java—(十二)面向对象之类与对象

IT研究僧 167

前言:

当前咱们对“java对象内容比较”大体比较着重,小伙伴们都需要剖析一些“java对象内容比较”的相关知识。那么小编在网络上收集了一些有关“java对象内容比较””的相关资讯,希望你们能喜欢,看官们一起来了解一下吧!

思想导入

有一句话叫作“万物皆对象”,有人说遍地都是对象。而在我们前期的代码编写过程中我们是把所有的代码全部写入到了main()方法中,事实上,这根本就不是面向对象的做法。慢慢的我们也开始写了一些方法开始接触到面向对象的一些内容。而从现在开始,我们要离开过程化的世界,开始建立自己的对象。我们也会看到类与对象的不同。

拿前面我们对数组的一些操作来说,我们是把一些单独的功能分别放在不同的方法里边,比如排序,找最值,求和等,而随着对数组操作的方法越来越多,那我们可不可以想一下,是否可以把这些方法存放在一块呢?当然可以,前面我们讲了类,我们可以把处理数组的方法全部封装在一个类里边,当我们再遇到需要对数组的操作时,不需要再重写这些方法,也不需要再找这些方法,只要找到封装了这些方法的那个类,通过这个类,来使用里边的方法,这就是简单的面向对象思想的编程方式。

我们刚开始接触Java时写代码,都是要搞清楚我们要怎么做,需要做哪些准备,然后一步步的去实现,而每一步的实现,我们都参与到了其中,最后完成了功能,这其实是面向过程最直接的体现。那什么是面向过程的开发呢?其实就是面向着具体的每一个步骤和过程,并完成,然后由这些功能和方法相互调用,完成需求,最典型的面向过程的语言:C语言。

如果功能要求单一,我们可以按照过程化的思维一步步的完成,而且这样操作起来非常方便,工作效率也很快。可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始思考,能不能把这些步骤和功能再进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。接下来我们看看面向对象到底是什么?

面向对象思想其实是基于面积过程的编程思想,而且面向对象的思想也是一种更符合我们思想习惯的思想,它可以将复杂的事情简单化,而且将我们从执行者变成了指挥者。

举个例子来说吧,我想买辆车,如果是面向过程的思想,选牌子,选配置,做比较,试驾….然后再买车。而面向对象的思想,我要买车,恰好我有一个亲戚是开4S店的,这个事情就好办了,我给你钱,OK,坐等开车就可以了。

用代码举例来说,去办公室接水的例子。

面向对象的开发呢,你们现阶段,只需要知道是不断的创建对象,使用对象,指挥对象做事情,而面向对象的设计简单来说其实就是管理和维护对象之间的关系。

我们学习编程语言,其本质是模拟现实世界的事物,实现信息化。比如:自助售票系统,银行业务系统等等。

而我们在学习面向对象之前呢,我们要先知道如何去表示一个现实世界事物。主要有两点:属性和行为。属性是该事物的描述信息,行为是该事物可以做的事情。拿员工(employee)事物说一下。

而我们学习Java呢,最基本的单位是类,所以,我们就应该把事物用一个类来体现。

内容开始

JAVA是面向对象的程序设计语言,Java语言提供了定义类(class)、属性(Field)、方法(method)等最基本的功能。类是一个自定义类型的数据类型。所有使用类定义的变量都是引用变量,变量都指向一个具体的类的对象。

面向对象的三大特征:封装、继承、多态。Java提供了private、protected、public三种访问控制修饰符来实现良好的封装,提供了extends关键字来实现继承关系,子类继承父类就可以继承父类的属性和方法。如果访问控制允许,子类实例就可以直接调用父类里定义的方法。继承是实现类复用的重要手段。

构造器也称构造方法用于对类实例进行初始化,构造器支持重载,其实也就是构造方法的重载。

作用域

当前类

当前包

子孙类

其他包

public

protected

X

private

X

X

X

default

当前包下继承可以

X

访问控制从大到小:public------protected-----default----private

5.1 类和对象

Java是面向对象的程序设计语言,类是面向对象的重要内容,可以把类当成一种自定义的数据类型,可以使用类来定义变量,这种类型的变量统称为引用变量,所有的类是引用数据类型。类是一组相关属性和行为的集合,而对象是该类事物的具体表现。

面向对象的程序设计过程中有两个重要概念:类(class)和对象(object),其中类是某一批对象的抽象,可以把类理解成某种概念。

例如 ------- 类: 员工 对象:项目经理

5.1.1 定义类

一、Java语言里定义类的语法格式:

[修饰符] class 类名{0到多个构造方法/构造函数/构造器0到多个变量0到多个方法}

修饰类的关键字可以是public(公共的)、final(最终的)、abstract(抽象的),或者完全省略这三个修饰符。类名是一个合法的标识符即可。但这仅仅是符合Java的语法要求,实际上从程序的可读性来说,Java的类名必须是由一个或多个有意义的单词连接而成,每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符,例如: public class ProductService{},从类名上就能看出这是一个为产品操作提供服务的类。

对于一个类定义而言,可以包含三种最常见的成员,也称为类成员,构造器、变量、方法,三种成员都可以定义0到多个。

类里面,各成员之间的定义顺序没有任何影响,各成员之间可以相互调用,但是用static修饰的成员只能访问static修饰的成员。

举例1:

public class Student {private String gender = "";static String name = "";public static void main(String[] args) {name = "zhangsan";gender = "man";}}

5.1.2定义Filed(变量):

变量是用于定义该类或该类的实例对象所包含的状态数据。

定义类变量(Field)语法格式如下:

1、修饰符可以省略,也可以是public、protected、private、static、final,其中public、protected、private三个只能出现其中一个,可以与static、final组合起来修饰field

2、变量类型:可以是Java语言中的任何数据类型:基本数据类型、引用数据类型。

3、Field名只要是一个合法的Java标识符即可,这是从语法角度来说,如果从程序可读性来说应该是每个单词首字母小写,后面每个单词首字母大写,与类名定义相似。

举例2:public static String name = “abc”;private static age = “23”;private final String classNum = “20130607”;
5.1.1.1需要注意一点的是,变量有一个就近原则。
static int num;public static void print(){int num = 3;System.out.println(num);}public static void main(String[] args){System.out.println(num);print();}
5.1.3定义方法(method):

方法是用于定义该类或该类实例的行为特征或者功能实现。

定义格式如下:

修饰符 返回值类型 方法名(参数类型 参数名称,参数类型 参数名称1,,,,){具体的代码;return 表达式;}

1、修饰符:修饰符可以省略,也可以是public、protected、private、static、final、abstract,其中public、protected、private三个只能出现一个,abstract和final最多只能出现其中之一,可以与static组合起来。

2、方法返回值类型:返回值类型是Java语言允许的任何类型,即:基本类型,引用类型。如果有返回类型,必须有一个有效的return语句,该语句返回一个变量或一个表达式。这个变量或表达式的类型必须与此方法声明的类型一致。

3、方法名:方法名命名规则与Field命名规则基本相同。

4、形参列表:形参列表用于定义方法可以接受的参数,形参类型和形参名之间用英文空格隔开。

举例3::

public int getTotalValue(int a,int b){int totalNum = a + b;return totalNum;}
5.1.4使用对象时的内存图:

我们在明确知道了定义类,变量,方法的规则,那现在我们来一块定义一个类来看一下。定义一个类时都需要注意哪方面的内容。

如果我想定义一个类来描述一下现实世界中的学生。那这个学生类都需要用到哪些变量,哪些方法呢?也就是说这个学生类都需要哪些属性以及可以做哪些动作?

定义一下类,包括定义一下对象,给对象的变量赋值,以及不赋值的初始值,完事再画一画对象的内存图来看一看,现在咱们可以把方法区这个概念给引导出来了。一个对象的内存图。那两个,三个呢?

5.1.5构造器(构造方法):

构造器用于该类的实例对象的初始化,Java语言使用new关键字来调用构造器(构造方法)从而返回这个类的实例。构造器是一个类创建对象的根本,如果一个类没有构造器,那么Java就会为该类提供一个默认的构造器。

构造器(构造方法)是一个特殊的方法,定义构造器的语法样式与定义方法的语法格式很像,定义构造器的语法格式如下:

[修饰符] 构造器名(形参列表){//0到多个可执行语句组成的构造器执行体}

修饰符:可以省略,也可以是public、protected、private其中之一。

构造器名:必须和类名一样。

形参列表:和定义方法形参列表格式完全相同。

注意:构造器既不能定义返回值类型,也不能使用void定义构造器没有返回值。这是Java规范定义的,实际上类的构造器是有返回值的,当使用new关键字来调用构造器时,构造器返回该类的的实例。

举例4:

public class Student{民private String name = null;private int age = 0;private String gender = null;Student(String name,int age,String gender){this.name = name;this.age = age;this.gender = gender;}public void introduce(){System.out.println(“My name is ”+this.name+”, age is ”+this.age);}}Student st1 = new Student(“zhangsan”,25,”男”);st1.introduce();Student st2 = new Student(“lili”,25,”女”);St2.introduce();

5.1.6关键字的讲解

static是一个特殊的关键字,它可以用于修饰方法,变量(Field)等成员,static修饰的成员表明它属于这个类本身,而不是该类的单个实例,通常把static修饰的变量(Field)和方法(method)称为类变量,类方法。不使用static修饰的普通方法、变量则属于该类的单个实例。 在这里我们先大体的了解一下static关键字。

举例5:

public class Student {private String gender = "";private static String name = "";public static void main(String[] args) {name = "zhangsan";System.out.println(name);Student st = new Student();st.name = "lisi";System.out.println(st.name); //实例的名称System.out.println(name); //类的名称st.gender = "男";System.out.println(st.gender);}}
5.1.7匿名对象详细讲解

匿名对象:就是没有名称的对象

匿名对象是对象的一种简化表示形式,那我们什么时候用匿名对象呢。

(1)当对象调用方法仅仅一次的时候。(2)作为实际参数传递时。

那用匿名对象有什么好处呢?匿名对象调用完毕就是垃圾,可以被垃圾回收器回收。

例如: (1) new Student().introduce(); 其实也是在堆内存中创建了这么一个对象。(2) 作为一个参数传递时。 st.test(new Student());
5.1.8对象、引用和指针

举例6:

package com.langsin.test;public class Student {private int age = 29;private String name = new String();private void say(){System.out.println("仅供自身调用");}public static void main(String[] args) {Student st = new Student();st.say();}}

如上例所示:在创建Student对象时,实际创建了两个东西,一个是栈内存中的变量st,存储的是类Student对象的地址值。一个是堆内存(数据区域)中的Student对象本身。在堆内存中的对象本身中,自身的属性变量(Field)并不是存放在栈内存中的,同样也是存放在堆内存中的。对于基本数据类型的变量(Filed)来说,变量存放的是具体的值,对于引用数据类型的变量(Field)来说,存放的同样是该类型指向的具体类型的地址值。引用变量都是指向堆内存里的对象。引用变量与C语言里的指针很像,都是存储一个地址值。

5.1.9 对象的this引用

我们定义了一个成员变量,可以在定义时给定值 。但我们一般不这么做,因为我们在后边使用类时,会根据不同的对象,赋予不同的值 ,除了使用对象名进行赋值以外,我们还可以使用方法来给变量进行赋值。(通过学生的属性赋值说明,包括就近原则,以及解决方式,引出this关键字)

public String name;public void setName(String name //后){ // //先String namename = name; // this.name = name;}public static void main(String[] args) {ClassDemo cd = new ClassDemo();//cd.name = "张三";cd.setName("张三");System.out.println(cd.name);}

Java提供了一个this关键字,this关键字总是指向调用该方法的对象

根据this出现位置的不同,this作为对象的默认引用有两种情况:

1、 构造器中引用,this指的是该构造器正在初始化的对象。

2、 在方法中引用,this指的是调用该方法的对象

this关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或Field。

举例1:

package com.langsin.test;public class Student {Student(){gender = "男";}private String gender = "";private static String name = "";public void standUp(){this.say();}private void say(){System.out.println("仅供自身调用");}public static void main(String[] args) {Student st = new Student();st.standUp();}}

注意:在默认情况下,因为调用关系都是对象本身的方法或者Field,所以this可以省略。

标签: #java对象内容比较