Java--类和对象之基础知识

Java作为面向对象程序设计语言的特点:

  • 所有东西都是对象
  • 程序是一大堆对象的组合
  • 每个对象都有自己的存储空间,可容纳其它对象----封装
  • 每个对象都有一种类型----class
  • 同一类对象能接收相同的消息----可替换

对象封装数据,并提供“接口”接收对数据的操作。对象的类型(class)规定了接口的形式。

对象的”接口“规定了对一个特定对象发送那些请求,然而在某些地方一定存在一些代码实现这些请求。这些代码和隐藏起来的数据则是”隐藏的实现“。

设置类边界(三个显式关键字,一个隐式关键字):

  • public: 任何人都可以访问,一般用来声明对外接口方便客户程序员使用。
  • private:除本类型的内部函数成员外都不可以访问。
  • protected: 涉及”继承“的概念,继承中的子类可以访问父类的protected成员。
  • friendly:  缺省时默认,涉及”封装“的概念,同一个包(Package)内可以访问。

组合(组织、包含):在现有类的基础上组织一个新类(现有类作为新类的一个成员对象),通常将现有类设置为”private“。对象的组合具有极大的灵活性,一般要先考虑组合实现,然后再考虑继承。

继承:衍生类具有和基础类相等的数据类型(掌握这种等价关系)。使用继承相当于创建了一个新类,该类不仅有现在的所有成员,还复制了基础类的接口。可向基础类发送的消息都可以发送给衍生类对象。

动态绑定:可将新类型替换为基础类型。如:

void doStuff(Shape s) {
 s.erase();
 // ...
 s.draw();
32
}
//Circle,Triangle,Line继承自Shape
Circle c = new Circle();
Triangle t = new Triangle();
Line l = new Line();
doStuff(c);
doStuff(t);
doStuff(l);

重写和重载:方法头完全一致是重写,方法头中参数有差别是重载。

抽象类:关键字abstract. 不希望实际创建基础类的对象,只是为衍生类提供一个接口。可以实现方法也可以不实现方法。

接口:完全禁止所有函数的定义。

Java中类只能单继承,可以保证父子类同属于一种类型,接口可以多继承。

每种非基本类型的对象都有一个 toString()方法。若编译器本来希望一个String,但却获得某个这样的对象,就会调用这个方法。

对象的存储

Java程序运行时,对象是怎么存储的?内存怎么分配?有五个地方可以存储数据(具体情况--Java虚拟机:内存区域划分):

  • 寄存器:这是最快的存储区,位于CPU内部,寄存器根据需求自动分配,程序员不能直接控制,在程序运行时也感觉不到寄存器的存在;
  • 堆栈:位于RAM中,但通过堆栈指针可以从CPU获得直接支持。堆栈指针向下移动则分配新的内存,向上移动则释放内存。这种方法快速有效,仅次于寄存器。为了上下移动指针,创建程序时Java系统必须知道存储在堆栈中所有项的具体生命周期。在程序中,对象的引用存储在堆栈,但Java对象并不存储在这;
  • 堆:一种通用的内存池,用于存放所有的Java对象。编译器不需要知道存储在堆中的数据的生命周期。堆的效率比堆栈低;
  • 常量存储:常量值通常直接存放在常量内部,有时嵌入式系统会把常量和其他部分分隔开,这时选择将其存放在ROM中;
  • 非RAM存储:如果数据完全存活于程序之外,不受程序控制程序结束也会存在(如文件),那么数据就可以存放在磁盘上或数据库中。

下一篇:类和对象之句柄和作用域

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

从反射链的构造看Java反序列漏洞

概况 今天我想从构造反射链的从无到有到被利用来谈谈java的反序列化漏洞,从反射的最开始到执行payload,一个从无到有的过程,首先我们介绍一下Transfo...

2689
来自专栏Python小屋

Python运算符+与+=的那些事

这两个运算符很多语言都提供了,好像也没啥好说的,不就是像下面这样子用嘛。 >>> x = 3 >>> y = x+6 >>> y 9 >>> x += 6 >>...

2725
来自专栏V站

PHP反序列化深入理解

在PHP中右serialize()和unserialize()两个函数,php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。u...

1875
来自专栏Java成长之路

四、Java对象的内存布局

上篇博客介绍的对象的创建过程,本文来介绍一下对象的组成结构。 在HotSpot虚拟机中,对象在内存中的布局划分为3个区域:对象头(Header),实例数据(...

1793
来自专栏转载gongluck的CSDN博客

c++ 中__declspec 的用法

c++ 中__declspec 的用法 语法说明: __declspec ( extended-decl-modifier-seq ) 扩展修饰符: ...

7357
来自专栏java思维导图

【一分钟知识】try catch finally执行顺序,final finally finalize的区别

final、finally、finalize的区别 final 如果一个类被声明为final,意味着它不能再派生出新的子类,即不能被继承,因此它和abstrac...

3526
来自专栏微信公众号:Java团长

Java堆和栈的区别

在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作...

1953
来自专栏积累沉淀

Java类加载原理机制

1.类的加载过程 JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤,如下图所示: ? 1...

24510
来自专栏GreenLeaves

C# 命名空间和程序集

一、命名空间 1、通过使用using关键字引入命名空间,减少代码量 命名空间对相关的类型进行逻辑分组,通过命名空间能快速的定位到相关的类型,例如:在System...

2248
来自专栏智能算法

Python学习(三)---- 集合、文件操作、字符编码和函数

https://blog.csdn.net/fgf00/article/details/52167245

982

扫码关注云+社区

领取腾讯云代金券