面向对象
静态属性,动态属性。(成员变量,方法)
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堆的区别 --------摘
| Heap(堆) | Stack(栈) | |
| JVM中的功能 | 内存数据区 | 内存指令区 |
| 存储数据 | 对象实例(1) | 基本数据类型, 指令代码,常量,对象的引用地址(2) |
对象实例在heap中分配好以后,需要在stack中保存一个4字节的heap内存地址,用来定位该对象实例在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 ;
}
}
本文深入探讨Java面向对象编程的核心概念,如继承、聚合、实现等关系,并详细解析Java中的内存分配机制,包括堆、栈及其它内存区域的功能与区别。
829





