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基础面向对象之类与对象的更多相关文章

  1. 第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点

    前言 Java基础面向对象-静态,单例模式,继承详情知识点.静态-static关键字,static变量,静态代码块,代码块(不加静态),对象创建过程,单例模式,继承. 静态-static关键字 // ...

  2. Java基础-面向对象第三大特性之多态(polymorphism )

    Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...

  3. Java基础-面向对象第二特征之继承(Inheritance)

    Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...

  4. Java基础-面向对象第一特性之封装(Encapsulation)

    Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...

  5. JAVA(一)JAVA基础/面向对象基础/高级面向对象

    成鹏致远 | lcw.cnblog.com |2014-01-23 JAVA基础 1.开发环境搭建 JAVA程序的执行流程 JAVA命令->要使用一个*.class文件(类文件)->通过c ...

  6. Java基础——面向对象

    Hello 大家好,我又来啦,今天我们来说说Java的面向对象. 还记得之前去面试几家公司的实习生职位,大部分面试官都问过我有关面向对象 的问题,不知道以后还会不会问,估计是不会了吧...(:3[▓▓ ...

  7. Java自学-面向对象 类和对象

    Java中的类和对象 引入面向对象的基本概念 假设,我们要设计一个LOL这样的游戏,使用面向对象的思想来设计,应该怎么做? 步骤 1 : 设计英雄这个类 LOL有很多英雄,比如盲僧,团战可以输,提莫必 ...

  8. Java基础教程——类和对象

    视屏讲解:https://www.bilibili.com/video/av48272174 面向过程 VS 面向对象 面向过程:强调步骤. 面向对象:强调对象. 面向对象的特点就是:隐藏具体实现的细 ...

  9. JAVA基础知识之IO——对象序列化

    对象序列化 Java对象序列化(Serialize)是指将Java对象写入IO流,反序列化(Deserilize)则是从IO流中恢复该Java对象. 对象序列化将程序运行时内存中的对象以字节码的方式保 ...

随机推荐

  1. Huffman 压缩和解压缩java实现

    附上完整的代码 http://download.csdn.net/download/u010485034/7847447 Huffman编码原理这里就不说了,是.这里来讲讲利用Huffman编码来进行 ...

  2. proxool的配置

    //依赖的包:commons-logging-api-1.1.jar,commons-logging-1.0.4.jar,proxool-0.9.1.jar,proxool-cglib.jar,cgl ...

  3. JSON之FastJson

    FastJson是什么? 从网上查到--- 官网地址:http://code.alibabatech.com/wiki/display/FastJSON/Overview(已关闭) FastJSOn是 ...

  4. parent和top

    function show(){ //parent是获取本窗口的父窗口   //window.parent.location.href="http://www.baidu.com" ...

  5. Windows Forms框架编程

    <Windows Forms框架编程>节选   第九章 设计模式与原则 软件设计模式(Design pattern)是一套被反复使用的代码设计经验总结.使用设计模式是为了可重用代码.让代码 ...

  6. iOS基础 - XML & JSON

    一.HTML & XML HTML 是用来描述网页的一种语言 HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记 ...

  7. C#串口通信程序详解

    C#串口通信程序详解 摘要:创建C#串口通信程序需要注意什么呢?创建C#串口通信程序的步骤是什么?那么本文就向你详细介绍创建C#串口通信程序集体的内容. 在.NET平台下创建C#串口通信程序,.NET ...

  8. Asp.net MVC集成Google Calendar API(附Demo源码)

    Asp.net MVC集成Google Calendar API(附Demo源码) Google Calendar是非常方便的日程管理应用,很多人都非常熟悉.Google的应用在国内不稳定,但是在国外 ...

  9. .Net 异步随手记(一)

    今天要记录的内容摘要是: 什么时候异步代码能“等”在那里,什么时候不会“等” 这两天Coding的时候碰到一个事儿,就是想让异步等在那里结果却直接执行过去了,比如这样: async static vo ...

  10. UISearchDisplayController UISearchBar

    分组表+本地搜索 UISearchDisplayController  UISearchBar 的使用 效果图 @interface CityListViewController :UIViewCon ...