第一篇文章 一个沙包的JAVA学习之旅(一)

为什么想学JAVA:

JAVA,从以前接触到爪哇手机、接触安卓手机、接触到MC的时候就产生了一点兴趣,我本人还是很向往计算机编程的。最开始觉得有人能做出PC端的应用程序很了不起,直到来到了大学。我是个专科生,严格意义上讲只有两年的学习机会,但却只是对java有很浅的认识,但第三年进一步的了解发现,java语言可能要比想象中的C语言要更加的有趣一些,“为什么不努力一下,找到一个自己向往的JAVA程序员呢?”,这便是我现在最真实的想法。

废话扯得有点多=-=,那么现在就开始正题,写博客这件事情是学长推荐的,他们都有着很强的JAVA后端开发功底,所以就开始尝试下。我决定这种学术总结类的文章不长不短,半个月一总结是最棒的。我的学习方法目前是从基础到深入,反复的去强调和印象加深,同时进行一段时间的理解,再加上实践,一个知识点应该很容易就被掌握了,待以后能有更加高效的学习方法。

写出 JAVA学习之旅 这个系列文章的目的

1、巩固自己半个月内所学习的新知识(列出自己觉得重要的)

2、总结自己的学习经验,并改正不利于学习的毛病

3、分享在网络上,希望各路大佬能对我不好的习惯或者是错误能及时的指出

4、分享给其他想要学习JAVA的人

本篇目的

1、面试题就是基础的测验(个人理解)

2、总结收获到的知识与技巧

3、截止发布日期所做的项目,有哪些技术值得深挖,哪些错误值得思考

参考到的非常不错的文章

两年JAVA开发工作的面试总结


一、JAVA基础

1、面向对象

面向对象有以下四大特征:

a.抽象:所谓的抽象就是把对象的特征集合在一起,只考虑对象的属性和行为,而不再局限于对象的行为细节,也就是行为过程(这个行为是如何实现的)。

b.继承:按照比较符合实际的定义是:从已有类中获得到继承信息并创建新类的过程。提供信息的类叫做父类,而继承者成为子类。(举例:学校中,老师、学生、校长都是人类,所以人类就能作为父类,而那些职位是他们需要额外的执行其他的行为,但同时又作为人,此时老师等就能继承父类,也就是继承“人”类)。

c.封装:按照定义来讲,封装即把对象的数据和操作数据的方法捆绑包装的过程,其中外界如果想实现某种行为,需要依靠封装的对象提供专门的接口才能实现,而对于这个外界对象,是不知道封装对象中的内容的。

d:多态:在参考的文章中有提到过运行时多态和编译时多态,我自己没有理解全面,以后会进行补充。所谓的多态就是一种对象可以对不同种消息能做出不同的响应的过程。例如重载(overload),一个类可以接受不同的对象而做出不同的响应。而重写,则是需要做两件事1)方法重写(子类继承父类并且重写父类已有或抽象的方法)2)用父类的引用去引用子类类型对象;同时要求子类的返回类型和父类相同。

2、java中的数据类型

在java中最基本的数据类型从范围以小到大分别是byte、short、int、long、float、double、boolean,其对应的包装类分别是Byte、Short、Integer、Long、Float、Double、Boolean,对于包装类和对应的数据类型而言,存在着自动装包与拆包的行为,我会进一步的去学习。(注:String不是基本的数据类型,String类也不能被继承,因为是final类)

3、java中的一些修饰语句

a. public、protected、defeult、private,分别是全都能访问、只有同类、子类、同包能访问、只能同类和子类能访问、只能同类访问。

b. static,是静态的意思,被static修饰的时候,当JVM加载文件时,会优先的初始化静态函数、参数、方法的,同时静态方法是无法被重写的,抽象方法需要子类重写,其原因我会继续的去学习和研究。

c. void,表面上可以看做是一种特殊的数据类型,当一个方法被void修饰时,将不会有return返回值,如果方法想要有返回值,则必须声明返回值类型。

	public static void main(String[] args) {
		sayTest("hi!");
	}
	private static sayTest(String str) {//Error
		System.out.println(str);
	}

d. final,final可以修饰类、方法、变量,分别的作用是不能被继承、不能被重写、变量不能改变(常量)。

e. abstract,译为抽象的,指当一个方法中存在抽象方法时需要声明为抽象的(abstract),被抽象修饰的方法中可以不包含抽象方法,并且可以被任何访问修饰符修饰,而当一个类继承了一个抽象类或者接口的时候,子类必须实现父类的所有抽象方法,否则必须声明为抽象的(abstract)。

f. interface,译为接口,其作用是封装一些抽象方法,而具体方法的实现并不些在接口类中,它只提供使用方法的接口,其中内部的方法皆是被public修饰,且均为抽象方法。

4、栈、堆、方法区

所有的基本数据和方法的引用都保存在栈中,栈是私有的,不被共享的;使用New关键字和构造器创造的对象都保存在栈中,栈是被其他线程共享的;一些静态的对象、JVM加载的class文件信息等都是保存在方法区中,同堆一样,是被线程共享的。例:

String str = new String("abc");

这个引用(str)是保存在栈中的,而 abc 是保存在静态区中的,所以是创造了两个实例。

5、JVM加载class文件的机制

我的理解:JVM加载class文件有三步,装载、连接、初始化;装载就是读取相应的java文件,并生成与其对应的class文件;连接又分为三步,验证(不清楚,要学习下)、准备(初始化静态对象并为其分配内存)、解析(讲符号引用转换为直接引用);初始化分为两步,优先检查子类的父类是否有被初始化,如果没有,就先初始化父类,然后再检查代码中的初始化语句,按顺序初始化。

6、GC

翻译为垃圾回收,它可以检测对象是否超过作用域,如果是则回收该对象节省内存。同时它可以防止内存泄露,它会清除长时间没被调用或已经死亡的对象。然而并不能有效的清除所有无意义对象,例如Hibernate和session皆为一级缓存,是持久态的,GC是不会清理持久态对象的。

7、异常

异常Exeption,分为运行时异常和非运行时异常(受检异常),运行时异常是指在虚拟机中可能会出现的问题,常见的一些异常有空指针异常、类转换异常、非法参数异常、算数异常、下标越界异常、安全异常,可以通过try catch方法捕获异常解决,而受检异常与上下文有关,必须声明可能抛出的受检异常,如IO流异常、SQL异常。

8、储存容器

有List、Vector、Map,其中List和Vector都是以数组的方式储存数据的,储存的数组一般会比实际元素多的原因是留出空位以便于元素的插入删除等操作,但在性能上List要比vector要强;List和Vector都继承collection接口,而map是键值对映射容器。(collections是一个工具类,能辅助集合进行排列、搜索等辅助操作)

9、sychronized

被sychronized修饰的表示线程同步,含义为会为当前方法配备一个锁,当线程进入方法是会取下锁,并执行操作,而其他的线程没有锁就没办法访问该方法,随后会进入等锁池,直到方法内线程完成操作后归还了锁,其他的线程才能继续依次取锁进行操作。

10、数据序列化

所谓的序列化就是指把数据进行流化的操作方式,这种技术有利于在网络中进行数据的传递,另外通过序列化还能实现深度克隆,

以上为个人总结的一些比较常见到的基础知识,后续可能还会补充


上一个完成的练习项目:使用Maven整合了SSM框架的对数据的查询功能

J2EE也需要一些基础知识,而目前所具备的基础知识还不足以达到列出来的程度,所以关于servlet等基础知识会放在月末进行总结。

目前准备进行进一步的去熟悉ssm框架与svn的使用。


猜你喜欢

转载自blog.csdn.net/kiss1078273923/article/details/80714586