java编程要点

java编程要点

面向过程与面向对象编程:

概念分析:

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
面向过程编程的基本单位是“步骤”,整个程序是由一个个步骤串联起来的,编程时先把整个需求分解成一个个步骤,它没有对象的概念,不管你是猪还是人还是狗,我只关注我下一步要干嘛;
面向对象编程的基本单位是“对象”,整个程序是由一个个对象构建起来的,编程时先把整个需求抽象成一个个类(对象),通过类(对象)之间的调用来完成功能需求。
优缺点比较:
面向过程开发容易,效率高,维护难,扩展难(不容易应对需求变化);面向对象对变化的封装容易,扩展性好,耦合性低,但开发相对较难。

java程序运行流程:

1). 编写.java文件,文件间通过import来相互引用关联;
2). 调用编译器的javac将.java文件编译成class文件;
3). 运用java命令,jvm启动,去向系统申请内存,内存大小由-Xms(默认物理内存的1/64,最大1G);
在运行过程中,当剩余可用内存<-Xms的40%(可设置)时,动态调整到-Xmx参数设定的大小(默认物理内存的1/64,最大1G);
当剩余可用内存>Xmx的70(可设置)时,动态调整内存到-Xms;
4). 获得内存后就,将其分成几块;
5). jvm调用BootStrapClassloader(c语言编写,不涉及先有鸡先有蛋的问题)加载ExtClassLoader和AppClassLoader;
6). AppClassLoader类加载器加载要执行的class文件,放入方法区,同时从class文件中提取类的一些信息,也存入方法区,这些信息包括但不限于类型的完整有效名、它的父类和接口的完整有效名、类型的修饰符、接口的列表、常量池、实例变量信息、方法信息、类变量的值、对加载器的引用和Class实例的联系等;
7). jvm为每个以加载的类型维护一个常量池,包括常量和符号引用(方法名/变量名等);
jvm静态常量池只.class文件中的Constants下面的所有列出的常量;运行时常量池指.class文件加载后静态常量池的数据在内存方法区的一块地方存储;
8). jvm为每个加载的类型都创建一个java.lang.Class实例,并在对应的方法区里把这个Class实例和类信息联系起来;
9). 检验:检查class文件的正确性;
10). 准备:为类的静态变量分配空间;
11). 常量池解析:把符号引用转成直接引用;
12). 类的初始化:执行类代码块(static修饰);
13). 对象的实例化:在堆上分配空间,执行实例代码块和构造方法,生成对象,该对象包含一个对象头,里面包含的信息:该对象属于哪个类,他的hashCode,它的年龄(垃圾收集);
14). 调用对象的方法:根据该对象所属的Class,去对应的.class文件中(方法区)根据方法签名找对应的方法的地址。如果是静态绑定的方法,直接找到方法的代码地址,否则,根据得到的地址去子类方法中找方法,再绑定给父类的方法值,再执行方法;
15). 创建方法栈:在栈上创建一个栈帧,栈帧上创建一个局部变量表(变量的数量由在类加载时对方法进行解析时确定)保存在方法区;
16). 执行方法;
17). 执行完成,方法退出栈,方法里对对象的引用失效;
18). GC线程运行,检查对象是否还有被引用(可达性分析,区分强引用,软引用,弱引用和虚引用);
19). 如果对象没有被引用,检查该对象是否重写了finalize()方法并还没被调用过;
20). 如果重写的finalize()方法并还没被调用过,把该对象放入一个队列中,等待之后一个线程批量执行这些对象的finalize()方法。
21). 可以在finalize()方法中把这个对象绑定到一个GC Roots对象中去,从而复活它,也可以写一些关闭资源,释放内存(主要是本地方法产生的)的代码;
22). GC除了回收堆里的内存,还可以释放方法区中的失效的常量和类,判断类是否废弃的三个条件间垃圾收集总结文档。
23). 对象被垃圾回收,生命周期结束。

怎样读源码:

看源码不一定要重头到尾把所有代码都通读一遍,一方面时间不允许,一方面也没必要。看源码主要的目的和查看的重点为一下三点(重粗到细,自顶向下):
1).查看该项目或者中间件的类体系架构。java类的体系架构是通过实现接口和继承父类实现的,当然,往细了说还包括类的组合,聚合等依赖关系。搞清楚了类的体系架构,整个项目也就了解了大半;
2).看项目用到的设计模式。设计模式是项目某个功能的具体实现方案;
3).看核心方法的具体实现代码。
上述三个方面是了解一个项目源代码的方法,也是学习和进步的三个主要方面。

UML类图:

1).类图:
如果是接口,在第一行类名上添加《interface》

2).类之间的关系:
继承关系:图例为实线三角形箭头:
在这里插入图片描述
接口实现:图例为虚线三角形箭头:
在这里插入图片描述
关联关系:表现为成员属性,图例为实线箭头:
————>
依赖关系:表现为方法的参数,图例为虚线箭头:
----------->
组合关系:特殊的关联关系,表现为构造函数的一部分,成员属性。图例为实心棱形箭头 :
在这里插入图片描述
聚合关系:表现为集合。图例为空心棱形箭头:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值