山东青岛安卓培训就业中心 专业Android软件工程师培训,手机软件开发人才就业实训中心0532-85025005

Java enum的用法详解

 

用法一:常量

在JDK1.5 之前,我们定义常量都是: public static fianl…. 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
public enum Color {  
  RED, GREEN, BLANK, YELLOW  

用法二:switch

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 16

Java学习笔记--流程语句注意点

 

增强for循环-foreach

增强for循环(从Java5开始):可以迭代数组和集合,取出其中的元素.

语法:
for(元素类型  变量 : 数组/Iterable对象){
   //TODO
}
使用for-each的底层是怎么回事?
对于数组来说:底层依然使用的for循环迭代数组,使用数组的索引来获取每一个元素.
对于Iterable对象来说:底层依然使用迭代器(Iterator).

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 16

java常见的几种内存溢出和解决方案

 项目组最近在开发中经常会出现一些意想不到的内存溢出问题。下面我就说说我们常见的几种内存溢出吧!
1.JVM Heap(堆)溢出:java.lang.OutOfMemoryError: Java heap space
JVM在启动的时候会自动设置JVM Heap的值, 可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap的大小是Young Generation 和Tenured Generaion 之和。在JVM中如果98%的时间是用于GC,且可用的Heap size 不足2%的时候将抛出此异常信息。
解决方法:手动设置JVM Heap(堆)的大小。
2.PermGen space溢出: java.lang.OutOfMemoryError: PermGen space
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。为什么会内存溢出,这是由于这块内存主要是被JVM存放Class和Meta信息的,Class在被Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,sun的 GC不会在主程序运行期对PermGen space进行清理,所以如果你的APP会载入很多CLASS的话,就很可能出现PermGen space溢出。一般发生在程序的启动阶段。
解决方法: 通过-XX:PermSize和-XX:MaxPermSize设置永久代大小即可。
3.栈溢出: java.lang.StackOverflowError : Thread Stack space
栈溢出了,JVM依然是采用栈式的虚拟机,这个和C和Pascal都是一样的。函数的调用过程都体现在堆栈和退栈上了。调用构造函数的 “层”太多了,以致于把栈区溢出了。 通常来讲,一般栈区远远小于堆区的,因为函数调用过程往往不会多于上千层,而即便每个函数调用需要 1K的空间(这个大约相当于在一个C函数内声明了256个int类型的变量),那么栈区也不过是需要1MB的空间。通常栈的大小是1-2MB的。通俗一点讲就是单线程的程序需要的内存太大了。 通常递归也不要递归的层次过多,很容易溢出。
解决方法:1:修改程序。2:通过 -Xss: 来设置每个线程的Stack大小即可。
4.but has failed to stop it. This is very likely to create a memory leak.
这一般是启动程序时一些定时器或其他正在操作的线程还没有停掉造成的。
解决方法:实现ServletContextListener的监听,在contextDestroyed方法中进行关闭。
5. 所以Server容器启动的时候我们经常关心和设置JVM的几个参数如下:
-Xms:java Heap初始大小, 默认是物理内存的1/64。
-Xmx:ava Heap最大值,不可超过物理内存。
-Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一 。增大年轻代后,将会减小年老代大小,可以根据监控合理设置。
-Xss:每个线程的Stack大小,而最佳值应该是128K,默认值好像是512k。
-XX:PermSize:设定内存的永久保存区初始大小,缺省值为64M。
-XX:MaxPermSize:设定内存的永久保存区最大大小,缺省值为64M。
-XX:SurvivorRatio:Eden区与Survivor区的大小比值,设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10
-XX:+UseParallelGC:F年轻代使用并发收集,而年老代仍旧使用串行收集.
-XX:+UseParNewGC:设置年轻代为并行收集,JDK5.0以上,JVM会根据系统配置自行设置,所无需再设置此值。
-XX:ParallelGCThreads:并行收集器的线程数,值最好配置与处理器数目相等 同样适用于CMS。
-XX:+UseParallelOldGC:年老代垃圾收集方式为并行收集(Parallel Compacting)。
-XX:MaxGCPauseMillis:每次年轻代垃圾回收的最长时间(最大暂停时间),如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。
-XX:+ScavengeBeforeFullGC:Full GC前调用YGC,默认是true。

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 22

Java 枚举用法详解

 

概念

enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性。

在Java中,被 enum 关键字修饰的类型就是枚举类型。形式如下:
enum Color { RED, GREEN, BLUE }
如果枚举不添加任何方法, 枚举值默认为从0开始的有序数值 。以 Color 枚举类型举例,它的枚举常量依次为RED:0,GREEN:1,BLUE:2

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 19

Java 中的内存模型

 

概述

在java中应为不同的目的可以将java划分为两种内存模型:gc内存模型。并发内存模型。

gc内存模型

java与c++之间有一堵由内存动态分配与垃圾收集技术所围成的“高墙”。墙外面的人想进去,墙里面的人想出来。

java在执行java程序的过程中会把它管理的内存划分若干个不同功能的数据管理区域。如图:

 

hotspot中的gc内存模型

整体上。分为三部分:栈,堆,程序计数器,他们每一部分有其各自的用途;虚拟机栈保存着每一条线程的执行程序调用堆栈;堆保存着类对象、数组的具体信息;程序计数器保存着每一条线程下一次执行指令位置。这三块区域中栈和程序计数器是线程私有的。也就是说每一个线程拥有其独立的栈和程序计数器。我们可以看看具体结构:

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 26

Java类的加载顺序【答疑解惑】

 

Java类的初始化顺序这个问题经常出现在面试题中,这个面试题设计的知识有类、对象、static关键字、初始化函数、类的加载顺序,咱们一个一个来说。

类:

类描述了具有相同特性(数据元素)和行为(功能)的对象集合,也是一个数据类型。比如说动物,它有重量、大小的特征(数据元素),也有移动、吃的行为(功能)。

对象:

对象是具有状态、行为和标识的是上面类的一个实例。每一个对象都有内部数据(它描述该对象的状态)和方法(它产生行为),并且每一个对象都可以与其他对象区分开来,就是一个对象在内存中都有一个唯一的地址。在Java中对象都必须通过new来产生。 
static:

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 24

程序员需要克服的10大障碍

 

软件开发中最艰巨的任务其实并不是代码。写代码是一种锻炼,一种逻辑思维上的锻炼,相比于开发人员在日常工作中要执行的其他任务,它可显得可爱多了。如果你觉得自己才刚刚跨入这个行业,只能算个业余程序员,那么为了确保能跻身专业领域,有些障碍你必须得克服……

 

1.解释做了什么

解释软件开发过程是很让人崩溃的一件事。那些不会写代码的家伙可能在这一行有所了解,但是正如定义所说的,他们不会写代码。在他们眼中,我们就是一群待在昏暗的房间中弓着背噼里啪啦敲键盘的程序猿。

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 23

来自投资银行的20个Java面试题

 

问题一:在多线程环境中使用HashMap会有什么问题?在什么情况下使用get()方法会产生无限循环?

HashMap本身没有什么问题,有没有问题取决于你是如何使用它的。比如,你在一个线程里初始化了一个HashMap然后在多个其他线程里对其进行读取,这肯定没有任何问题。有个例子就是使用HashMap来存储系统配置项。当有多于一个线程对HashMap进行修改操作的时候才会真正产生问题,比如增加、删除、更新键值对的时候。因为put()操作可以造成重新分配存储大小(re-sizeing)的动作,因此有可能造成无限循环的发生,所以这时需要使用Hashtable或者ConcurrentHashMap,而后者更优。

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 19

最常用的设计模式

 

最近在学习观察者模式,下面我想给分享自己对观察者模式的理解和心得,观察者模式是我们使用频率最高的设计模式之一,用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将做出反应。在观察这模式中发生改变的就是观察目标,而被通知的对象视为观察目标,而被通知的对象视为观察者,一个观察目标可以对应多个观察者。而且这些观察者之间可以没有任何相互的联系,可以根据需要增加或删除观察者,使系统更易拓展。可以说观察者在我们生活中的实例无处不在,比如我们常用的QQ空间就可以理解为一种观察者模式,比如当我们CSDN发一篇博客的时候,首先管理员会看见,他们会对我们这篇博客进行审核,另外广大的网友也可看见,他们可以点赞亦可评论,甚至还能举报,在这里我们发的博客作为目标,而管理员和网友作为观察者,他们可以对这篇博客有反应,这就是观察者模式。

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 17

程序员内心真正的需求到底是什么?

 

产品是软件。

我喜欢搞那些公司主营计划的业务。但是由于IT部门只提供间接支持,所以我只能放弃。我也很喜欢做系统的中心部分——总之,越重要我越来劲。最后因为我真心不想再仅仅只是给不同公司的软件写配置、调试和衔接——我决定听从自己的心声,开始去写一些有意义的功能模块。

牛逼的同事。

和一些很厉害又对工作充满激情的程序员一起工作,是一件非常刺激的事。事实一次又一次地证明,和这些家伙讨论之后出来的方案,比我们各自绞尽脑计想出来的还要好。而且整个讨论的过程也能让人学到很多东西,非常过瘾。

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 16