OOP-class03

before class

构造函数

1.构造函数的名称是和类的名称是相同的

2.构造函数的前面是没有返回类型的

3.构造函数在进行实例化的方法的时候,需要去使用一个new的方法去创建

4.扮演初始化对象的角色

 

初始化对象的作用

the same with the class name

No return type

Using the key word of New to create the constructor

Play the role of creating object

No args and args - constructor

 

Default Construction(没有参数和空的函数体)

一个类中也是不可以不去使用这个构造函数的

当你定义一个类没有构造函数的时候,会出现一些问题

当一个没有参数的,而且是一个空的函数体的构造函数

implicitly隐事的,隐隐地会被加上,,explicitly显示的

(没有参数和空的函数体)no-arg constructor 和 empty body这两条的关系中都进行了相关的满足就被创建

提供的那个函数就是默认的构造函数

当我们自己去编写上这个构造函数的时候,就是显示的构造函数

 

创建对象的时候,我们要使用这个new的这个关键字

Circle(相同类型的引用类) myCircle(对象类型的引用变量) = new Circle();(创建了一个对象)

本质上就是创建一个内存的空间

=赋值运算符

 

《Java编程思想》“万物皆对象”,每个对象中都具有各自的状态特征(也可以去理解为相关的属性),及其行为特征,Java就是通过这个对象之间的行为的交互来解决问题的

三大特征:

1.封装:核心思想就是去隐藏相关的细节,数据安全,将对象不需要让外界访问的成员变量和方法私有化,只提供符合开发者意愿的公有方法来访问这些数据和逻辑,保证了数据的安全和程序的稳定性。所有的内容对外都是不可见的

2.继承:子类可以去继承父类的相关的方法,并且对其进行相关的拓展。将其他的功能继承下来继续发展

3.多态:同一种类型的对象执行同一个方法的时候可以去表现出不同的相关的行为的特征。通过继承的上下转型、接口的回调以及方法的重写和重载可以去实现多态。方法的重载本身上就是一个多态的体现

 

三大思想:

OOA:面向对象分析

OOD面向对象的设计

OOP面向对象的程序

 

类与对象

类表示一个共性的产物,是一个综合的相关的特征,而对象是一个个性的产物,是一个个体的特征

类必须去通过对象才可以去使用,对象的所有的操作都是要在类中去定义的

 

一个类要是想真正的进行操作的时候,必须去依赖对象

对象的定义的格式

 

类的名称 对象的名称=new 类名称()

 

对象.属性

调用类中的方法: 对象.方法(实际参数列表) ;

 

类必须编写在.java文件中;

一个.java文件中,可以存在N个类,但是只能存在一个public修饰的类;

.java文件的文件名必须与public修饰的类名完全一直;

同一个包中不能有重名的类;

 

匿名对象

 

1.没有对象名称的对象就叫做匿名对象,即栈内存中没有名字,而堆内存中没有对象

2.匿名内部类中的对象只能去使用一次,因为没有任何对象的相关引用,所以就被称作是垃圾,等待着GC的回收

3.只使用一次的对象可以去通过匿名对象的方式完成,这一点在以后的开发中是经常的使用到的

 

public static void main(String[] args){

    //Math2 m=new Math2();

    //int num=m.sum(100,200);

    //不通过创建对象名,直接实例对象调用,这就是匿名对象。因为没有对象名指向对象,所以只能调用一次,然后被GC回收。

    int num = new Math().sum(100,200);

    System.out.println(num);

}

class Math2{

    int sum(int x,int y){

        return x+y;

    }

}

 

创建对象的内存分析

栈(stack)

 Java中的栈的区域是很小的,大概是2m左右,特点就是这个存取的速度特别的快

 

栈存储的特点就是:先进后出

存储的速度快的原因:

栈内存,通过这个‘栈指针’来创建空间与释放空间

指针向下的移动,会创建新的内存向上去移动的时候,就会去释放这些内存

这种方式速度很快,仅次于PC寄存器

但是这种的移动的方法,必须要去明确这个移动的大小和范围

 

明确大小和范围就是为了去方便指针的移动,这对于一个数据的存储的限制,这个存储的数据的大小是固定的,影响了程序的灵活性

 

所以我们把更大的相关的内存就去放到了这个堆内存中

 

堆存储的是:

基本数据类型的数据以及引用数据的引用

 

int a =10; 

Person p = new Person(); 

 

10存储在栈内存中 , 第二句代码创建的对象的引用§存在栈内存中

 

堆(heap) 是存放的就是类的对象

Java是一个纯面向对象的语言,限制了这个对象的创建的方式

所有类的对象都是去通过这个new这个关键字去进行创建的

new关键字, 是指告诉JVM , 需要明确的去创建一个新的对象 , 去开辟一块新的堆内存空间:

堆内存与栈内存不同, 优点在于我们创建对象时 , 不必关注堆内存中需要开辟多少存储空间 , 也不需要关注内存占用时长 !

堆内存中内存的释放是由GC(垃圾回收器)完成的

 

 

Person p0 = new Person(); 

Person p1 = p0; 

Person p2 = new Person(); 

 

新生代(Young Generation,常称为YoungGen)

 

老年代(Old Generation,常称为OldGen、TenuringGen)

 

永久代(Permanent Generation,常称为PermGen)

 

新生区(New/Young Generation):

 

新生代(Young Generation),常称为YoungGen,位于堆空间。

 

新生区又分为Eden区和Survior(幸存区)。

 

Eden:新创建的对象

 

Survior 0、1:经过垃圾回收,但是垃圾回收次数小于15次的对象。

 

养老区(Old Generation):

 

老年代常称为OldGen,位于堆空间

 

Old:垃圾回收次数超过15次,依然存活的对象。

 

永久区(Permanent Generation):

 

永久代常称为PermGen,位于非堆空间。

 

永久区是一个常驻内存区域,用于存放JDK自身所携带的Class,Interface的元数据,也就是说它存储的是运行环境必须的类信息,被装载进此区域的数据是不会被垃圾回收器回收掉的,关闭JVM才会释放此区域所占用的空间。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值