javaSE
梵城中的燕
生如夏花之绚烂
展开
-
java虚拟机运行过程
先看一张图片: 这个就是java虚拟机的运行过程: java作为一种安全的,可编译的,平台移植的强类型语言,它的基础就是jvm虚拟机,那么就是说java代码的运行过程也就是jvm虚拟机的运行过程.对于我们java的学习者来说,jvm是机器机器重要的. 这里涉及到俩个名词:编译/运行编译(compile)时左半部分图片,就是说把java语言编译成为字节码,这 .java就是我们写的代码,那么原创 2016-11-05 16:37:20 · 789 阅读 · 0 评论 -
final、finally和finalize
简单的说一哈, final是修饰符,final修的类,不能被继承,修饰的方法不能被覆盖,修饰的属性如果没有在申明的地方赋值,那么就必须在构造方法里赋值,局部方法里不能用fanal修饰.finally是关键字,在处理异常的时候我们需要把每次必须执行的东西放到fianlly中,比如说,io流的关闭,session的关闭等等.finalize()是一个方法,当我们想手动调用垃圾回收机制的时候,调用sys原创 2016-11-08 21:22:25 · 430 阅读 · 0 评论 -
内存泄露之前因后果
内存,一个关于游戏运行及超爽体验的神器,那么有关软件项目开发中内存的问题也成了程序员的必修课! 我们常说的内存不够,是内存溢出的问题,我们将在下一个博客讨论,这里先说内存泄露. 内存泄露的原因: 我们每次创建引用类的数据类型,他会在我们的对内存中分配相适合大小的空间,但是在使用完之后并没有置为null,也就是说,系统以为我们还再用,就不会调用垃圾回收机制,这样就造成了内存的泄露.在C/C++中原创 2016-11-12 16:13:26 · 393 阅读 · 0 评论 -
内存溢出
我们接着内存泄露说内存溢出.内存溢出在生活中很常见,比如在我们运行大型游戏,或者在电脑上运行了很多的程序,会造成系统报出内存溢出,请关闭程序的警示框. 那么,内存溢出其实就是内存泄露的进阶问题,当内存泄露到一定程度,必然会造成内存溢出.在平时运行过程中,如果不是你程序开的太多了,就是你运行的这个软件本身就有问题(当然,这样问题很少出现,因为软件并不是随随便便就发布到市场的). 在编程过程中,如果原创 2016-11-12 16:40:10 · 472 阅读 · 0 评论 -
冒泡及其优化
冒泡这个东东我们很早接触了,顾名思义,就是把最大的数(或者最小的数)向谁中的一个泡泡一样冒出来,哈哈,有没有听晕,就是按照顺序排序,从大到小,或者是从小到大.最简单的冒泡(从小到大):int number=new int[10];for(int i=0;i<a.length;i++){ for(int i=0;i<a.length;i++){ int temp=0;原创 2016-11-18 10:35:04 · 217 阅读 · 0 评论 -
希尔排序
我去,提出这个排序方法的人,简直牛的不要不要的!基本思路:先将数据按照固定的间隔分组,例如每隔 4 个分成一组,然后排序各分组的数据,形成以分组来看数据已经排序,从全部数据来看,较小值已经在前面,较大值已经在后面。将初步处理了的分组再用插入排序来排序,那么数据交换和移动的次数会减少。可以得到比插入排序法更高的效率例子:public class Test { public static voi原创 2016-11-18 10:42:21 · 217 阅读 · 0 评论 -
length和size和length()
一口气写了4篇,累死…最主要的length的问题,length可以是属性,那么调用就是对象.length,如果是方法就是对象.length(),size就是方法,对象.size()length作为属性的只有数组.String[] str=new String[5];str.length;length()在其他的地方都是方法,字符创的长度,还可以使文件的大小.String str=new Strin原创 2016-11-15 15:29:44 · 642 阅读 · 0 评论 -
failed to load the JNI shared library ....jvm.dll
玩jee开发,一直在MyEclipse上玩,但是今天拿到了在ecilpse上集成了jbpm的安装包,却不能安装一直报错. 错误时win系统报出的: failed to load the JNI shared library ….jvm.dll 就是这样的错误,结果我去制定路径查找是存在的,那么问题的关键在哪里呢?…. 记得开始用的就是Eclipse,jdk版本用的1.6,后来换成了mye原创 2016-11-15 14:31:14 · 299 阅读 · 0 评论 -
equals()和hashcode()
equals()和hashcode()都是总父类object中的方法,所有类都默认继承了object类,但是在object中的equals和hashcode()的实现都不尽如意,所以一般使用这俩个方法都需要重写.object类中的equals()方法用的比较方法是”==”,那么就是说比较的地址,但让,如果你用equals就是用作数值的比较,那不必说了,如果不是,那么object的equals方法就不原创 2016-11-21 11:56:36 · 318 阅读 · 0 评论 -
Serializable和Externalizable
无论是Serializable,还是Externalizable,他们都是实现序列化或者持久化的接口. 先解释下什么叫序列化,序列化就是对象保存到磁盘上,或者是对象由一台机器发送过来并保存下来就是序列化. 那么,serializable和externalizable就是用来标示这个对象时可以被序列化的,既然是一样的功能,那么serializable和externalizable的区别是什么:实原创 2016-11-21 14:07:01 · 1341 阅读 · 2 评论 -
线程和进程的异同
线程也叫做轻量级的进程,那么进程是什么,进程就是一个程序开启,一个进程就会随之开启,我们可以再 任务管理器中的进程那一栏看到的都是进程,我们会发现,一个程序只有一个进程. 我们说一个进程可以有有个线程,就是说一个程序开启了,里面调用各种资源什么的都是有这个进程的线程完成的,所以说进程有线程组成.进程的创建会占用大量的资源的,比说内存和cpu,而且进程之间的切换同样是这样的.这就是为什么我们开启程原创 2016-11-21 14:40:25 · 472 阅读 · 0 评论 -
线程之间状态和转换
线程创建之后并不是直接开始运行的,而是分了各种状态以便于管理,这样想,cpu就一个,及时你的电脑是4核或者8核,那么也只能同时运行这么多,但是你开启的线程那么多,怎么保证每个都运行呢,那么就必须进行管理.线程状态分为创建,就绪,运行和阻塞和结束五个状态.创建:这个状态是线程刚刚创建,只是在堆内存中分配了空间.就绪:这是的线程已经执行了start()方法,等待获取cpu的运行权限.运行:这个时候原创 2016-11-21 15:23:52 · 2253 阅读 · 0 评论 -
Thread.sleep()和Thread.yield()
这俩个方法都是停止当前的线程,把运行的机会让出来. 但是Thread.yield()却可能让不出来.sleep()方法会给其他线程运行机会,而不考虑其他线程的优先级,因此会给较低优先级线程一个机会;yield()方法只会给相同优先级或者更高优先级线程一个运行的机会。当线程执行了sleep(long millis)方法后,会转到阻塞状态,参数millis指定睡眠的时间;当线程执行了yield()原创 2016-11-21 15:31:12 · 469 阅读 · 0 评论 -
异常Exception
在计算机执行我们编写的程序过程中,如果出错,一边可以分为俩种,一种是错误,error,这个事系统的错误,我们不可以修改,出现这样的错误建议立刻停止程序的运行.另一种是我们的程序出现了异常Exception,这是由于我们自己编写代码过程中的失误造成的,是可以修改调整的. 异常如果细分的话,可以分出3中,一种是编译异常,就是语法错误,一般的ide(比如eclipse/Myeclipse)直接报错,不能原创 2016-11-08 20:32:33 · 628 阅读 · 0 评论 -
线程THread的俩种创建方式
线程创建有俩种方法,一种是扩展Thread类,也就是继承Thread类,另一种的实现Runnable接口.实际上,Thread类也实现类Runnable接口的. 第一种,继承Thread接口:public class MyThread extends Thread(){ public void run(){ //执行过程 } //有main方法调用,main方法也是一个线程原创 2016-11-08 20:07:07 · 674 阅读 · 0 评论 -
重写和重载
重写:也叫做覆盖,是把父类的相同的方法在实现一次.可以用@overload标示重写是静态的多态 重载:是对同一个方法的不同表现形式.@override标示覆盖称为动态多态 重写中,是对一个函数实现不同的功能,规则: 1.方法名称必须相同,参数个数,类型,必须和父类对应 2.权限不能比父类小 3.异常不能比父类抛出的多 重在是对同一个功能的不同表现形式,规则: 1.名称必须相同 2.参原创 2016-11-07 20:28:15 · 557 阅读 · 0 评论 -
java的三大特性
开门见山,java的三大特性是:jvm虚拟机/垃圾回收机制/代码安全性. 首先接着java虚拟机的安全性: 1.编译阶段,.java文件编译成为.class文件,如果java代码有错误,是编译不成功的! 2.类加载的时候,会将本地资源和网络加载的东西分离,防止“特洛伊木马”的入侵! 2.在java的运行机制里面,还有一个字节码校验! 4.程序运行的沙箱,如果加载文件没有得到权限的同意,是不原创 2016-11-05 16:59:50 · 3550 阅读 · 0 评论 -
java环境变量的配置原理
说实话,我刚开始接触java的时候,特别不理解为啥哟啊这样配置,然而答案是乌龟的屁股….其实,仔细想想之后,还要有规则的嘛. java环境配置三个地方: JAVA_HOME:jdk家目录 classpath:查找他的类文件,进行类装载 path:进入到\bin目录下查找他的工具,比如javac,java(解释器,interprater) path的配置理解: 这里在解释一下,从jvm运行原创 2016-11-05 17:21:49 · 2279 阅读 · 0 评论 -
参数传递
参数传递一共俩种:值传递和引用传递,区别就在名称上,前者是数值的传递,后者是地址的传递. 再次之前,先要知道什么是实参,什么是形参.区别也在名称,前者是一种形式,比如说数据类型: `public void hello(String name){ system.out.println(“hello”+name); }public void main(){ hello(“jav原创 2016-11-05 18:03:24 · 655 阅读 · 0 评论 -
int 和 Integer 有什么区别
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。int 是 java 的原始数 据类型,Integer 是 java 为 int 提供的封装类。Java 为每个原始类型提供了封装类。 原始类型 封装类, char Character, short Short, int Integer, long Long, double D原创 2016-11-07 11:30:03 · 6680 阅读 · 1 评论 -
位运算和逻辑运算
常用位运算: &(与),|(或),~(取反),^(异或) 逻辑运算: &&(与),||(或),!(非) 更具定义,位运算是对数值进行位数的操作,而逻辑是对进行boolean的结果运算,就是说,我们经常把他们用到if()判断的条件中去,而这个时候,就会出现一个严重问题:短路 短路在物理中是该走的用电器不走了,也就是跳过,直接进行下一个用电器,那么这里和物理的差不多,也就说当编程过程中,发射管原创 2016-11-07 11:56:27 · 1129 阅读 · 0 评论 -
"=="和equals()
== 操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存 储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。 如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块 内存(堆内存),变量也占用一块内存,例如 Objet obj = new Object();变量 obj 是一个 内存,new Object()是原创 2016-11-07 12:51:07 · 421 阅读 · 0 评论 -
面向对象的四大特性
1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的 方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两 个方面,一是过程抽象,二是数据抽象。 就是说,我们在需要这个显示对象的什么属性的时候就写他的什么属性,比如一个人的成绩和超时购物,那么就是说一个人的业绩和购物都是每个人的生活必须,但是我们在做他成绩抽象的时候是不会写出原创 2016-11-07 13:00:14 · 1533 阅读 · 0 评论 -
double和float的精度问题
这几天的复习,知道了double和float无论在c++,还是java中,都是不适合运作加减乘除四则运算的.具体原因就是数据类型的精度造成的.就是说,用double或者float运算的时候,会造成结果的不确定.System.out.println(0.05+0.01);System.out.println(1.0-0.41); System.out.println(4.025*100原创 2016-11-07 13:51:36 · 887 阅读 · 0 评论 -
BigDecimal 和 BigInteger
一般来说,BigInteger用的不是很多,BigDecimal用的稍微多一点,就比如说JDBC中,如果一个字段的数据库类型是Number, 那么getObject().getClass()的结果是java.math.BigDecimal。 BigInteger相比Integer的确可以用big来形容。它是用于科学计算,Integer只能容纳一个int, 所以最大值也就是2的31次访减去1,十进原创 2016-11-07 16:12:27 · 682 阅读 · 0 评论 -
跳出多重循环
其实这个事很有趣的,但实际也无非就是一个总结; 1.总所周知的break; 2.不常见的标签跳转; 3.逻辑实现的跳转; 4.牵强拿来的return; 来,代码之前要说明,其实大多还是break的一种变体形式, 小二,来一壶热茶和二俩代码:ok:for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { System.out原创 2016-11-07 16:30:20 · 392 阅读 · 0 评论 -
属性和构造的执行
oh..my god!无聊看了下小程序,自己逻辑出的结果和机器不一样,这不是最悲剧的,最悲剧的是墨迹了半天才想起其中的道理.class Super { int i = 10; Super( ) { print( ); i = 20; } void print( ) { System.out.print(i); }}原创 2016-11-07 18:11:44 · 611 阅读 · 0 评论 -
单例模式的俩种表现形式
软件修真界流传着23中上乘仙绝,下面先介绍我们常用的一种,单例模式. 背景:创造一个对象和创造一个人一样,创造了人,人需要资源,造的多了,地球就不堪重负,那么对象也是这样,但是对象和人不同,我们可以改变他的模式,减少不必要的开销,提高性能,提高安全. 解决办法:使用单例模式,每次的访问,我们之创建一个对象,用这一个对象去访问,其实这里的一个并不是正真的一个,是更具实际情况顶出来的,不能说1000原创 2016-11-07 18:49:24 · 797 阅读 · 0 评论 -
java反射和动态代理
说实话,java反射是我刚搞懂的,搞了一年的java,连个java反射都不会,感觉愧对丹尼斯里奇祖师爷。 好了,废话不多说了,说说自己的见解。 反射,不仅在java中有,c#中也是有java机制的,反射的作用是让你自己你自己所有的属性,方法和构造器。而反射主要用于框架中,就是我们import导入了框架中的类,但是该类的属性,方法是通过反射知道的,总结来说,导入类之后,我知道了自己有几斤原创 2017-08-22 09:58:58 · 348 阅读 · 0 评论