JAVA基础知识点整理(二)

本文详细讲解了JVM的四大内存区域:栈区、堆区、全局数据区和全局代码区,比较了基本数据类型与引用数据类型的差异,剖析了Java方法参数传递机制,并介绍了数组、对象创建、局部变量和成员变量的区别,以及访问权限修饰符。同时涵盖了构造方法的特性和使用new关键字创建对象的完整流程。
摘要由CSDN通过智能技术生成

JVM的内存结构---四大存储区

(1)栈区(Stack)---存放基本数据类型的局部变量和所有Java对象的引用,方法栈用于保存方法的调用时的相关信息(调用语句位置,形参等)
(2)堆区(Heap)---存放所有的Java对象实例的具体属性内容
(3)全局数据区(Global Data)---存放静态变量和全局常量
(4)全局代码区(Global Code)---存放实例方法和静态方法

基本数据类型和引用数据类型的区别

(1)基本数据类型只有八种(byte short int long boolean char float double),其余的都属于引用数据类型又叫对象类型,如数组,字符串等
(2)占用的内存空间不同
   基本数据类型的变量和对应的数据都存放在栈空间中
   引用数据类型的数据存在于堆空间中,而引用型变量存在于栈在空间中,相当于一个指针指向堆空间的某个对象,存储的对象在堆空间中的首地址
(3)生命周期不同
   基本型数据的作用范围是定义它的一对{}内,一旦出了大括号的范围,基本类型数据就被销毁
   引用型数据的作用范围是从创建对象开始(new),一旦数据没有被任何引用变量引用(null),则对象成为垃圾,一旦被垃圾回收器回收,引用类型数据就被销毁

Java方法调用时参数的传递机制

(1)基本类型参数,传递变量的数值
(2)引用类型参数,传递变量的引用(指向堆空间中对象的地址)

数组的特点总结

(1)存放多个数据,每个数据的数据类型相同,名称相同,靠下标区分
(2)数组一经创建,长度就固定了,不可改变
(3)数组是引用类型数据,数组中的实际数据保存在堆内存中,而且元素之间的地址连续的
   数组变量位于在栈内存中,仅仅保存数组数据在堆内存中的首地址

使用new关键字创建对象的过程

(1)加载类的字节码文件到内存(只执行一次),初始化静态成员变量,如果类中存在静态代码块,则先执行静态构造代码块中的语句
(2)在堆区为类的实例属性分配存储空间,并将类中的方法放入全局代码区
   (2.1)如果类的属性定义时没有指定初始值,则取默认值
   (2.2)如果类的属性定义时指定了初始值,则以此初始值为准
(3)如果类中存在构造代码块,则先执行构造代码块中的语句
(4)调用类的构造方法对属性值再次赋值
(5)在栈区创建引用型变量,并将对象的地址值赋给该变量(指向该对象),至此对象创建完成

局部变量和成员变量的区别

(1)定义位置不同
   (1.1)局部变量是定义在方法中
   (1.2)成员变量用于描述一类事物的公共属性,定义在类中,方法之外
(2)占用的内存空间不同
   (2.1)局部变量存储在栈区中
   (2.2)非静态成员变量存储在堆区中
    静态成员变量存储在全局数据区中
(3)生命周期不同
   (3.1)局部变量的作用范围是定义该变量的一对{},开始于该变量的定义语句,结束于变量所处于的{}
   (3.2)非静态的成员变量随着对象的创建而存在,随着对象的消失而消失
        静态成员变量随着类的加载而存在,程序结束,JVM卸载时销毁
(4)初始值不同
   (4.1)局部变量没有默认的初始值,使用前必须要先初始化
   (4.2)成员变量有默认的初始值
         数据类型         默认的初始值
    byte/short/int/long           0
    float/double                 0.0                
    boolean                   false
    char                         ' '
    引用数据类型             null

访问权限修饰符

(1)public---用public关键字修饰的属性和方法,任何类中都可以访问
(2)protected---使用protected关键字修饰的属性和方法,本类所在包的所有类,以及不同包的子类中都可以访问
(3)default---不使加任何修饰的属性和方法,本类所在包的所有类中都可以访问
(4)private---使用private关键字修饰的属性和方法,只能在本类中可见

构造方法(Constructor)

(1)构造方法的名称必须和类名一致
(2)构造方法没有返回值类型
(3)构造方法的作用是给新创建的对象属性初始化,而不是创建对象,创建对象由new关键字负责
(4)构造方法在创建对象时由JVM自动调用
(5)如果类中没有提供任何构造方法,编译器会自动在类中添加一个无参的构造方法,该方法中没有任何代码
   如果类中已经提供了构造方法,编译器不再添加无参构造方法
(6)一个类可以存在多个构造方法,形成重载
(7)构造方法不能使用static,final,abstract修饰符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值