面向对象 笔记 Stack栈和Heap堆

面向对象
静态属性,动态属性。(成员变量,方法)
1.xx是一种xx---继承关系(  一般和特殊)
2.聚合关系(整体和部分)  ---聚集,组合
3.实现关系 (与接口interface相关)

域对象间的关系

1.关联:类间的引用关系。以属性定义的方式表现。
在一个类中声明另外一个类
关联可分为一对一、一对多和多对多。还可分为单项关联和双向关联
2.依赖:类之间访问关系。无需定义成属性。在A中访问B中的方法或属性,或者A负责实例化B。
3..聚集(Aggregation):整体与部分的关系。例人与手set的关系。部分类的对象不能单独存在,他的生命周期依赖于整体类的对象的生命周期,整体消失时,部分也随之消失。
人类 set hands = hashset();
4.一般化(Generalization):类之间继承关系。


声明抽象的方法,必须声明为抽象类;抽象类没有方法体;且抽象类必须被继承,方法

必须被覆盖实现。  另抽象类不能被实例化。

接口是一种特殊的抽象类,属性的声明必须为public static final 也是默认的。
接口可以多重实现,可以继承其他的接口,添加新的属性和抽象方法。

static已在内存堆中分配了

声明为final的方法和类不能被继承和重写覆盖

重写,继承父类的,具有相同方法列表,类型,返回类型。
重载,方法的重载,一个类中具有相同的名字,但参数不同(个数,类型)的多个方法。

 

--------------------------------------

Java内存的分配,Java中有6个地方都可以保存数据:
1> 寄存器: 这里是最快的保存区域,因为它位于处理器内部,但是寄存器的数量十分有限,所以寄存器是据需要由编译器分配的,我们没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。
2> 栈区: 驻留于常规RAM(随机访问存储器)区域。各种原始数据类型的局部变量都是在栈上创建的,当程序退出该变量的作用范围的时候,这个变量的内存会被自动释放。
3> 堆区:一种常规用信途的内存池(也在RAM区域),其中保存了Java对象。对象(包括数组)都是在堆中创建的。程序在运行的时候用new关键字来创建对象,对象创建时会在堆中为其分配内存。
4> 静态存储 :内存在程序编译时就分配好了,比如静态变量;
5> 常数存储
6> 非RAM存储


 [Java]Stack栈和Heap堆的区别 --------摘

首先分清楚Stack,Heap的中文翻译:Stack—栈,Heap—堆。
       在中文里,Stack可以翻译为“堆栈”,计算机术语里面堆和栈开头的词语:
        堆存储: heapstorage    堆存储分配: heapstorage allocation  堆存储管理: heap storage management
        栈编址: stack addressing   栈变换:stack transformation  栈存储器:stack memory  栈单元: stack cell 
       接着,总结在Java里面Heap和Stack分别存储数据的不同。 
        Heap(堆)       Stack(栈)
 JVM中的功能      内存数据区                    内存指令区
 存储数据      对象实例(1)  基本数据类型, 指令代码,常量,对象的引用地址(2)
1. 保存对象实例,实际上是保存对象实例的属性值,属性的类型和对象本身的类型标记等,并不保存对象的方法(方法是指令,保存在stack中)。
   
   对象实例在heap中分配好以后,需要在stack中保存一个4字节的heap内存地址,用来定位该对象实例在heap中的位置,便于找到该对象实例。
 
2. 基本数据类型包括byte、int、char、long、float、double、boolean和short。
    函数方法属于指令.
 
 =======================       
  引用网上广泛流传的“Java堆和栈的区别”里面对堆和栈的介绍;
          "Java 的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。"
        “栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。 ”
   
          可见,垃圾回收GC是针对堆Heap的,而栈因为本身是FILO - first in, last out. 先进后出,能够自动释放。 这样就能明白到new创建的,都是放到堆Heap!

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

static声明属性的话,则为全局属性(静态属性)。声明的类,叫类方法;用static声明的内部类则变成外部类,但不能访问非static的外部类属性。

 

this. 1.表示类中属性;2可以使用this调用本类的构造方法。3。this表示当前对象
子类不能访问父类的私有成员,但可以调用父类中的非私有方法。


接口内都是全局常量,抽象方法。
允许一个抽象类实现多个接口。
一个接口不能继承一个抽象类,却可以通过extends同时继承多个接口(实现接口的多继承)


适配器设计:
是一个类要实现一个接口中所有方法,但是不需要使用所有方法,抽离出来的一个过渡类(abstract类)。
interface interface{};
abstract class implements interface{};
class extends abstract class{}; 

 

erro,Exception.都是Throwable的子类。
throws关键字抛出异常。
assert断言,放表达式前,肯定返回值是正确的,如果错误,用它来检查为客户提示错误信息。
native 表示调用本机的操作系统函数。

scanner.useDelimiter("/n");修改分隔符

线程状态:创建,就绪,运行,阻塞,终止。

==内部类扩展,实际上可以在一个抽象类中定义多个接口和抽象类;接口中也可以定义抽象类或接口。

观察者模式:掌握Observable类和Observer接口

SequenceInputream 合并流。合并2个文件。
ZipOutputStream,ZipFile,ZipInputStream 3个类;压缩流

在对象的序列化中有一个常量
private static final long serialVersionUID ;用来记录JDK版本,反序列化要一致。
如果一个属性不希望被序列话,使用transient声明。
Externalizable 接口实现自定义外部Object读写属性
链表:
package Demo.javatest;

public class LinkDemo {
 public static void main(String[] args) {
  Node root = new Node("火车头");
  Node n1 = new Node("A");
  Node n2 = new Node("B");
  Node n3 = new Node("C");
  root.setNext(n1);
  n1.setNext(n2);
  n2.setNext(n3);
  printData(root);
 }
 public static void printData(Node node){
  System.out.println(node.getData()+"/t");
  if(node.getNext() != null){
   printData(node.getNext());
  }
 }
}
class Node{
 String data ;
 Node next ;
 public Node(String data){
  this.data = data ;
 }
 public String getData(){
  return this.data ;
 }
 public void setNext(Node next){
  this.next = next ;
 }
 public Node getNext(){
  return this.next ;
 }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值