java基础类型对象_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 classPerson1{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 voidmain(String args[]){10 Person1 p1 = new Person1() ; //声明并实例化对象

11 p1.eat() ; //调用Person1类中的eat()方法

12 }13 }

对以上程序进行分析:

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

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

d7e022972290cd755ea73d36f4a555e4.png

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

3)掌握对象的内存分析

引用数据的初步分析

7bbe721b809a30823304ce071ee25951.png

对象的引用传递

1 classPerson2{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 voidmain(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 }

3989cea6a9a034b7896fb0c5e2d9ed76.png

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

继续观察引用传递

1 classPerson2{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 voidmain(String args[]){10 Person2 p2 = new Person2(); //声明并实例化对象

11 Person2 p3 = newPerson2();12 p2.name="zhangbojie";13 p2.age = 20;14 p3 = p2 ; //把p2的引用传递给P3

15 p3.name = "张博杰" ; //p3修改了姓名和年龄

16 p2.eat() ; //调用Person2类中的eat()方法

17 }18 }

b42f0d9ad4d15f8552aacb32c1d0887b.png

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

总结:

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值