疯狂java突破程序员基本功的16课_疯狂Java突破程序员基本功的16课  读书笔记(一)...

数组

1、Java数组是静态的:Java语言是典型的静态语言,即当数组被初始化之后,该数组的长度是不可变的,java中的数组必须经过初始化才能使用。所谓初始化就是为数组对象的元素分配内存空间,并为每个数组元素指定初始值。

2、基本数据类型的数组,元素直接存储到数组中

引用类型数组的数组元素依然是引用类型的,因此数组里存储的元素还是引用,它指向另一块内存,这块内存里存储了该引用变量所引用的对象。

对象

1、局部变量的作用时间很短暂,它们都被存储在方法的栈内存中。

2、使用static修饰的成员变量是类变量,属于该类本身;没有使用static修饰的成员变量是实例变量,属于该类的实例。在同一个JVM内,每个类只对应一个class对象(JVM对一个java类(类本身,不是只对象)只初始化一次),但每个类可以创建多个java对象。

3、从另一个角度来看,类也是对象,所有类都是class的实例。每个类初始化完成之后,系统都会为该类创建一个对应的class实例,程序可以通过反射来获取某个类所对应的实例。

4、java允许用类对象来访问类成员(static),但底层仍然是通过类名来调用的。

5、当类初始化完成后,类变量也随之初始化完成,以后不管程序创建多少个对象,系统都不再为类变量分配内存,但每次都会为实例变量(对象)分配新的内存。

6、java对象的3种初始化方式:构造器(构造方法)、初始化代码块、定义变量时指定初始值。

初始化代码块总是优先与构造方法执行(其实三种方法的初始化完全类似,都是用于对实例变量的初始化,经过编译器处理之后,它们对应的赋值语句都被合并到构造器中。合并后的初始化语句总是位于构造方法的所有语句之前)

7、JVM对一个(static)java类只初始化一次,程序可以在2个地方对类变量执行初始化

a)、定义类变量是指定初始值

b)、静态初始化块中对类变量指定初始值

8、关于子父类的初始化顺序(构造方法的执行顺序):

super调用用于显式调用父类的构造方法,this调用用来显式调用本类中另一个重载的构造器。super调用和this调用都只能在构造器中使用,而且都必须作为构造器的第一行,因此构造器中

只能出现一个super或 this。

当没有显式调用(super/this)时,系统会在执行子类构造方法之前隐式调用父类无参的构造方法。(都是从顶层父类开始初始化直到本类(子类

)的初始化,返回本类实例)

9、对于一个引用类型(类)的变量而言,当通过该变量访问它所引用的的对象的实例变量(成员变量)时,该实例变量的值只取决于声明该变量时的值(赋的初始值);当通过该变量来调用它所引用的对象的方法时,该方法行为取决于它所实际引用的对象类型。

10、final修饰符

a)、final可以修饰变量,被final修饰的变量被赋初始值,不能对它重新赋值。

b)、final可以修饰方法,被final修饰的方法不能被重写。

c)、final可以修饰类,被final修饰的类不能派生子类(不能被继承)

注意1:在定义final修饰的变量时直接赋初始值,会将该变量变成“宏变量”(系统中出现该变量的地方都会变成这个值),而在构造方法或者初始化代码块中赋值就不会有这种效果。

注意2:java要求所有被内部类访问的局部变量都使用final修饰的原因是:对于普通局部变量而言,它的作用域就是停留在该方法内,当方法执行结束时该局部变量也随之消失;但内部类则可能产生隐式的“闭包(Closure)”,闭包将使得局部变量脱离它所

在的方法继续存在。

11、java会缓存所有曾经用过的字符串直接量到常量池中,如果之后又用到这个直接量就会直接指向常量池。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值