java基础面向对象之类与对象

Posted 西巴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础面向对象之类与对象相关的知识,希望对你有一定的参考价值。

java基础面向对象之类与对象

2017-01-14

1、面向对象的基本概念

    以一种组建化的形式进行代码设计

    1)在面向对象程序设计中包含有如下几种特性

        •封装性:保护内部结构的安全性

        •继承性:在已有的程序结构上扩充新的功能

        •多态性:在某一个该娘范围内满足

     2)面向对象开发分为以下几个步骤:

        OOA(面向对象分析)

        OOD(面向对象设计)

        OOP(面向对象编程)

2、类与对象

    1)了解类与对象的关系

      ♦认识类与对象

        类与对象是整个面向对象之中最基础的组成单元,类是共性的一个集合,而对象是某一个体的产物。

        例如:

           人类(姓名,年龄,工作,除了这些属性类还包括一些方法比如吃饭,玩等等)

           对象(对象就是具体到某一个人)

 

        类实际上是对象操作的模板,但类不可以直接使用,必须通过实例化对象来使用

      

    2)掌握类与对象的定义结构

      ♦类与对象的基本定义

        一个类需要包含属性和方法

        定义类:

1 public class ClassDemo1 { //定义一个类
2     public String name ;    //类中的name属性
3     public int age ;        //类中的age属性
4     private void eat() {    //类中的eat()方法
5         System.out.println("我在吃饭");
6     }
7 }

 

        类现在已经产生了,但是如果要使用类,就必须得实例化对象。

 

          实例化对象的两种方式:

            •声明并实例化对象: 类名称  对象名称 = new  类名称() ;

            •分布完成:

              类名称  对象名称  =  null; 

              对象名称 =  new  类名称() ;

        引用数据类型与基本数据类型最大的区别就是,引用数据类型需要内存的开辟及使用,关键字 new 就是开辟内存空间,既只要是引用数据类型想要使用,就必须使用关键字new来开辟内存空间    

        

        使用类:

        对象.属性:表示类操作属性中的内容

        对象.方法():表示类操作方法中的内容

 1 class Person1{
 2     public String name ;    //类中的name属性
 3     public int age ;        //类中的age属性
 4     public  void eat() {    //类中的eat()方法
 5         System.out.println("我在吃饭");
 6     }
 7 }
 8 public class ClassDemo1 { //定义一个类
 9     public static void main(String args[]){
10         Person1 p1 = new Person1() ;    //声明并实例化对象
11         p1.eat() ;        //调用Person1类中的eat()方法
12     }
13 }

 

         对以上程序进行分析:

        堆内存:保存对象的属性内容,一般使用new关键字来开辟堆内存空间

        栈内存:保存的是一块堆内存的地址,从严格来说占内存保存的是对象的地址,但简单理解栈内存中保存的就是对象的名称。 

                                                  

        如果只声明了对象而没有实例化对象就会出现java.lang.NullPointerException(空指向)异常 。 只要是引用数据类型就有可能出现此异常。

 

 3)掌握对象的内存分析

        引用数据的初步分析

                                      

 

         对象的引用传递

 1 class Person2{
 2     public String name ;    //类中的name属性
 3     public int age ;        //类中的age属性
 4     public  void eat() {    //类中的eat()方法
 5         System.out.println("姓名:"+name + "年龄"+age);
 6     }
 7 }
 8 public class ClassDemo2 { //定义一个类
 9     public static void main(String args[]){
10         Person2 p2 = new Person2();    //声明并实例化对象
11         p2.name="zhangbojie" ;    
12         p2.age = 20 ;
13         Person2 p3 = null ;
14         p3 = p2 ;        //把p2的引用传递给P3
15         p3.name = "张博杰" ;    //p3修改了姓名和年龄 
16         p3.age = 21;
17         p3.eat() ;        //调用Person2类中的eat()方法
18     }
19 }

 

                                                              

        此时两个对象指向 的是同一块内存空间,所以任何一个对象修改了属性的内容,都会影响另一个对象。 在引用操作过程中,一块堆内存可以被多个栈内存索引用。但是反过来,一个栈内存只能保存一块堆内存的地址。

        

        继续观察引用传递

 1 class Person2{
 2     public String name ;    //类中的name属性
 3     public int age ;        //类中的age属性
 4     public  void eat() {    //类中的eat()方法
 5         System.out.println("姓名:"+name + "年龄"+age);
 6     }
 7 }
 8 public class ClassDemo2 { //定义一个类
 9     public static void main(String args[]){
10         Person2 p2 = new Person2();    //声明并实例化对象
11         Person2 p3 = new Person2();
12         p2.name="zhangbojie" ;    
13         p2.age = 20 ;
14         p3 = p2 ;        //把p2的引用传递给P3
15         p3.name = "张博杰" ;    //p3修改了姓名和年龄 
16         p2.eat() ;        //调用Person2类中的eat()方法
17     }
18 }

 

                                                       

       

        通过内存的分析可以看出来,在引用数据关系里面,一块没有栈内存指向的堆内存的空间,就将成为垃圾,所有的垃圾会被垃圾回收机制(GC)不定期的进行回收,回收之后就会释放掉其所占的内存。

        

        总结:

          1、类描述的是公共的特征,类必须要实例化对象才可以使用。

          2、堆内存中保存的是所有属性的内容,而栈内存保存的是堆内存的地址。

          3、垃圾空间指的是没有栈内存空间引用的堆内存空间。

以上是关于java基础面向对象之类与对象的主要内容,如果未能解决你的问题,请参考以下文章

12-Python基础之类与面向对象

java面向对象之类和对象

JavaSE之类与对象

C++基础——C++面向对象之类对象与继承基础总结(类和对象概念构造函数与析构函数this指针继承)

代码学习PHP面向对象之类与对象

Python基础之类与模块化