java基础面向对象之类与对象
2017-01-14
1、面向对象的基本概念
以一种组建化的形式进行代码设计
1)在面向对象程序设计中包含有如下几种特性
•封装性:保护内部结构的安全性
•继承性:在已有的程序结构上扩充新的功能
•多态性:在某一个该娘范围内满足
2)面向对象开发分为以下几个步骤:
OOA(面向对象分析)
OOD(面向对象设计)
OOP(面向对象编程)
2、类与对象
1)了解类与对象的关系
♦认识类与对象
类与对象是整个面向对象之中最基础的组成单元,类是共性的一个集合,而对象是某一个体的产物。
例如:
人类(姓名,年龄,工作,除了这些属性类还包括一些方法比如吃饭,玩等等)
对象(对象就是具体到某一个人)
类实际上是对象操作的模板,但类不可以直接使用,必须通过实例化对象来使用
2)掌握类与对象的定义结构
♦类与对象的基本定义
一个类需要包含属性和方法
定义类:
public class ClassDemo1 { //定义一个类
public String name ; //类中的name属性
public int age ; //类中的age属性
private void eat() { //类中的eat()方法
System.out.println("我在吃饭");
}
}
类现在已经产生了,但是如果要使用类,就必须得实例化对象。
实例化对象的两种方式:
•声明并实例化对象: 类名称 对象名称 = new 类名称() ;
•分布完成:
类名称 对象名称 = null;
对象名称 = new 类名称() ;
引用数据类型与基本数据类型最大的区别就是,引用数据类型需要内存的开辟及使用,关键字 new 就是开辟内存空间,既只要是引用数据类型想要使用,就必须使用关键字new来开辟内存空间
使用类:
对象.属性:表示类操作属性中的内容
对象.方法():表示类操作方法中的内容
class Person1{
public String name ; //类中的name属性
public int age ; //类中的age属性
public void eat() { //类中的eat()方法
System.out.println("我在吃饭");
}
}
public class ClassDemo1 { //定义一个类
public static void main(String args[]){
Person1 p1 = new Person1() ; //声明并实例化对象
p1.eat() ; //调用Person1类中的eat()方法
}
}
对以上程序进行分析:
堆内存:保存对象的属性内容,一般使用new关键字来开辟堆内存空间
栈内存:保存的是一块堆内存的地址,从严格来说占内存保存的是对象的地址,但简单理解栈内存中保存的就是对象的名称。
如果只声明了对象而没有实例化对象就会出现java.lang.NullPointerException(空指向)异常 。 只要是引用数据类型就有可能出现此异常。
3)掌握对象的内存分析
引用数据的初步分析
对象的引用传递
class Person2{
public String name ; //类中的name属性
public int age ; //类中的age属性
public void eat() { //类中的eat()方法
System.out.println("姓名:"+name + "年龄"+age);
}
}
public class ClassDemo2 { //定义一个类
public static void main(String args[]){
Person2 p2 = new Person2(); //声明并实例化对象
p2.name="zhangbojie" ;
p2.age = 20 ;
Person2 p3 = null ;
p3 = p2 ; //把p2的引用传递给P3
p3.name = "张博杰" ; //p3修改了姓名和年龄
p3.age = 21;
p3.eat() ; //调用Person2类中的eat()方法
}
}
此时两个对象指向 的是同一块内存空间,所以任何一个对象修改了属性的内容,都会影响另一个对象。 在引用操作过程中,一块堆内存可以被多个栈内存索引用。但是反过来,一个栈内存只能保存一块堆内存的地址。
继续观察引用传递
class Person2{
public String name ; //类中的name属性
public int age ; //类中的age属性
public void eat() { //类中的eat()方法
System.out.println("姓名:"+name + "年龄"+age);
}
}
public class ClassDemo2 { //定义一个类
public static void main(String args[]){
Person2 p2 = new Person2(); //声明并实例化对象
Person2 p3 = new Person2();
p2.name="zhangbojie" ;
p2.age = 20 ;
p3 = p2 ; //把p2的引用传递给P3
p3.name = "张博杰" ; //p3修改了姓名和年龄
p2.eat() ; //调用Person2类中的eat()方法
}
}
通过内存的分析可以看出来,在引用数据关系里面,一块没有栈内存指向的堆内存的空间,就将成为垃圾,所有的垃圾会被垃圾回收机制(GC)不定期的进行回收,回收之后就会释放掉其所占的内存。
总结:
1、类描述的是公共的特征,类必须要实例化对象才可以使用。
2、堆内存中保存的是所有属性的内容,而栈内存保存的是堆内存的地址。
3、垃圾空间指的是没有栈内存空间引用的堆内存空间。
java基础面向对象之类与对象的更多相关文章
-
第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点
前言 Java基础面向对象-静态,单例模式,继承详情知识点.静态-static关键字,static变量,静态代码块,代码块(不加静态),对象创建过程,单例模式,继承. 静态-static关键字 // ...
-
Java基础-面向对象第三大特性之多态(polymorphism)
Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...
-
Java基础-面向对象第二特征之继承(Inheritance)
Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...
-
Java基础-面向对象第一特性之封装(Encapsulation)
Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...
-
JAVA(一)JAVA基础/面向对象基础/高级面向对象
成鹏致远 | lcw.cnblog.com |2014-01-23 JAVA基础 1.开发环境搭建 JAVA程序的执行流程 JAVA命令->要使用一个*.class文件(类文件)->通过c ...
-
Java基础——面向对象
Hello 大家好,我又来啦,今天我们来说说Java的面向对象. 还记得之前去面试几家公司的实习生职位,大部分面试官都问过我有关面向对象 的问题,不知道以后还会不会问,估计是不会了吧...(:3[▓▓ ...
-
Java自学-面向对象 类和对象
Java中的类和对象 引入面向对象的基本概念 假设,我们要设计一个LOL这样的游戏,使用面向对象的思想来设计,应该怎么做? 步骤 1 : 设计英雄这个类 LOL有很多英雄,比如盲僧,团战可以输,提莫必 ...
-
Java基础教程——类和对象
视屏讲解:https://www.bilibili.com/video/av48272174 面向过程 VS 面向对象 面向过程:强调步骤. 面向对象:强调对象. 面向对象的特点就是:隐藏具体实现的细 ...
-
JAVA基础知识之IO——对象序列化
对象序列化 Java对象序列化(Serialize)是指将Java对象写入IO流,反序列化(Deserilize)则是从IO流中恢复该Java对象. 对象序列化将程序运行时内存中的对象以字节码的方式保 ...
随机推荐
-
Notepad++的xml文本格式化
1.需要使用插件 2.使用插件
-
PHP高效率写法及原因
1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍. 当然了,这个测试方法需要在十万级以上次执行,效果才明显. 其实静态方法和非静态方法的 ...
-
青瓷引擎之纯JavaScript打造HTML5游戏第二弹——《跳跃的方块》Part 10(排行榜界面&;界面管理)
继上一次介绍了<神奇的六边形>的完整游戏开发流程后(可点击这里查看),这次将为大家介绍另外一款魔性游戏<跳跃的方块>的完整开发流程. (点击图片可进入游戏体验) 因内容太多,为 ...
-
vs2008 c++工程如何设置生成调试信息
记录一个使用vs2008碰到的问题: 今天在用vs2008的时候,想封装一个lib库,建了一个c++的lib工程,后来为了测试函数功能,想偷懒就直接在工程中加了个main函数,并且把工程属性prope ...
-
django template出错
解决方法一: 先导入settings >>> from django.conf import settings >>> settings.configure() & ...
-
jquery里的attr()方法和prop()方法的区别
在jq的高版本里出现了prop()方法,那么attr()和prop()的区别在哪呢?这两者分别在什么情况用呢? 对于HTML元素本身就带有的固有属性,在处理时,使用prop方法. 对于HTML元素我们 ...
-
动态调用WebService(传对象返回接受对象)
基础属性//客户端代理服务命名空间,可以设置成需要的值. string ns = string.Format("WindowsForms"); private Assembly a ...
-
原生js实现放大镜
效果: 1. 鼠标放上去会有半透明遮罩.右边会有大图片局部图 2. 鼠标移动时右边的大图片也会局部移动 放大镜的关键原理: 鼠标在小图片上移动时,通过捕捉鼠标在小图片上的位置,定位大图片的相应位置 ...
-
STS-新建spring mvc项目
引入响应的jar包解决报错: 由于国内的网络限制,下载会较慢.使用之前可自行更换maven的镜像路径,越近越好.
-
Creating OpenGL 4.3 window fails with GLFW3
I set up a minimal application to open a blank window with GLFW3: #include <iostream> #inclu ...