java类加载 + android伪3d效果

本文深入探讨了Java类加载的过程,包括类的声明和初始化,并结合《Thinking in Java》中的观点进行了解读。同时,文章介绍了如何在Android中实现3D效果,通过自定义`Rotate3d`动画类,利用`Camera`和`Matrix`实现视图的旋转动画,展示了Android平台上简单的2D转3D转换技巧。
摘要由CSDN通过智能技术生成

 

 

一、java类的加载即其字段的初始化过程理解


声明初始化永远都是c系以及java等编程语言初学者避免不了的一个重要问题。理解这两个概念,是接近语言本质的一小步,更是初学者的一大步。看了近一个月的thinking in java,我确实挺佩服Bruce Eckel出神入化的java神功,也为他行文的风格折服了不尽数次。而在这本神书的96页,则对刚才所述的两个概念在java中的表现形式有了一个很精辟的叙述。在此我就谈谈对这几句的感受吧。

 

 

先对两个概念给出本人自理解版的定义:

 

声明:在内存中为某将要使用的语言要素(字段抑或方法)分配内存,并为其命名。如:int duck;就是在内存中分配了int所需的若干字节,然后给它取名为duck.这句就像你向别人说:哎,我要32块钱去买只鸭子。但鸭子是啥品种现在连你自己都还不知道。

 

初始化:为已声明的内存第一次分配一个值。“已声明”、“第一次”是这句话的关键。例如:int duck = 250;这句话就像你对别人说:哎,我要32块钱去买只鸭子,这只鸭子是250。你现在很明确你要买什么品种的鸭子,所以一声明后,你就为它赋予了你想要给予它的特性。

 

有些书上老说,声明初始化某变量,让人看后以为声明初始化是一个单独的概念——额,其实是两个啦。

 

好了,废话少说,开讲正文。

 

首先是那几句原话:

 

(1) 类型为Dog的一个对象首次创建时,或者Dog类的static方法/static字段首次访问时,Java解释器必须找到Dog.class(在事先设好的类路径里搜索)。
(2) 找到Dog.class后(它会创建一个Class对象,这将在后面学到),它的所有static初始化模块都会运行。因此,static初始化仅发生一次——在Class对象首次载入的时候。
(3) 创建一个new Dog()时,Dog对象的构建进程首先会在内存堆(Heap)里为一个Dog对象分配足够多的存储空间。
(4) 这种存储空间会清为零,将Dog中的所有基本类型设为它们的默认值(零用于数字,以及boolean和char的等价设定)。
(5) 进行字段定义时发生的所有初始化都会执行。
(6) 执行构建器。正如第6章将要讲到的那样,这实际可能要求进行相当多的操作,特别是在涉及继承的时候。

(Bruce哥不要说我抄袭,借鉴借鉴哈)

 

第一句:

这句阐述的是jvm何时以及怎样加载某个类。很显然,根据这句话的表述,我们可以看出:当用new关键字来首次创建某对象,或者直接访问静态的类方法或类字段时,jvm开始打算加载某个类(这里的类就是那个Dog类,强烈要求下个版本换为Duck!)。然后jvm便通过默认或用户自己设置的classpath来找到那个同名的class文件,紧接着便发生了加载。

 

第二句:

加载的结果就是在jvm中产生了一个包含了该类所有信息的Class对象。紧接着就对静态的模块进行了初始化。这里就是在说,你做的所有关于静态模块的初始化工作都在这里第一次,也是最后一次完成了——不论你是用的“static int duck = 250”的形式,还是用的静态代码块的形式。

 

ps:

静态代码块初始化

static int duck ;

static

{

duck = 250;

}

 

第三、四句:

这两句话是前两句话的注解:1.Java内对象是在堆内存里产生的。2.而且在分配了供这个对象使用的内存后,这段内存里的每个存储单元都会被jvm清零(所达到的效果就是基本类型被置为0 或 0.0 或 false ,引用则被置为null)

要提醒的是,这两句里的动作都在一二句之前完成。否则会出现可笑的情形:不管你咋初始化,你最后都会郁闷的发现被归零了。

 

 

第五句:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值