J2SE
北京Java青年
这个作者很懒,什么都没留下…
展开
-
heap和stack有什么区别
java的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。 堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用new创建的对象都放在堆里,所以,它不会随方法的结束而消失。方法中的局部变量使用final修饰后,原创 2019-06-13 20:04:36 · 351 阅读 · 0 评论 -
JVM加载class文件的原理机制
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。原创 2019-06-13 20:04:15 · 265 阅读 · 0 评论 -
什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用
我们有时候将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象,例如,要将java对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个java对象变成某个格式的字节流再传输,但是,jre本身就提供了这种支持,我们可以调用OutputStream的writeObject方法来做,如果要让java 帮我们做,要被传输的对象必须实现serializab原创 2019-06-13 20:03:37 · 3729 阅读 · 0 评论 -
struts2拦截器定义
为什么需要拦截器: 1. 早起MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足,可扩展性降低。 2. Struts2将核心功能放在多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于系统的解耦。 什么是拦截器: 1. struts2大多数核心功能是通过拦截器实现的,每个拦截器完成某项功能; 2. 拦截器方法在action执行之前或之后执行; 3. 拦截器原创 2019-06-13 19:57:35 · 444 阅读 · 0 评论 -
Struts2核心接口、类
Struts2核心接口和类ActionMapper:根据请求的URL查找是否存在对应Action调用;ActionMapping:保存调用Action的映射信息,如namespace、name等;ActionProxy:在Xwork和真正的Action之间充当代理;ActionInvocation:表示Action的执行状态,保存拦截器、Action实例;Inteceptor:在请求处理之原创 2019-06-13 19:57:18 · 1899 阅读 · 0 评论 -
两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对
对。 如果对象要保存在HashSet或HashMap中,它们的equals相等,那么,它们的hashcode值就必须相等。 如果不是要保存在HashSet或HashMap,则与hashcode没有什么关系了,这时候hashcode不等是可以的,例如arrayList存储的对象就不用实现hashcode,当然,我们没有理由不实现,通常都会去实现的。原创 2019-06-13 19:56:22 · 747 阅读 · 0 评论 -
collection和collections的区别
Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 Java.util.Collection是一个集合接口,提供了对集合对象进行基本操作的通用接口方法。 Collection接口在Java类库中有很多具体的实现。 Collection接口的意义是为原创 2019-06-13 19:55:46 · 584 阅读 · 0 评论 -
去掉一个Vector集合中重复的元素
Vector newVector = new Vector();For (int i=0;i<vector.size();i++) {Object obj = vector.get(i); if(!newVector.contains(obj); newVector.add(obj);}还有一种简单的方式,HashSet set = new HashSet(vector);原创 2019-06-13 19:55:30 · 2418 阅读 · 0 评论 -
HashMap和Hashtable的区别
Vector newVector = new Vector();For (int i=0;i<vector.size();i++) {Object obj = vector.get(i); if(!newVector.contains(obj); newVector.add(obj);}还有一种简单的方式,HashSet set = new HashSet(vector);原创 2019-06-13 19:54:05 · 284 阅读 · 0 评论 -
ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时原创 2019-06-13 19:54:54 · 380 阅读 · 0 评论 -
List、Map、Set三个接口,存取元素时,各有什么特点
首先,List与Set具有相似性,它们都是单列元素的集合,所以,它们有一个功共同的父接口,叫Collection。Set里面不允许有重复的元素,所谓重复,即不能有两个相等(注意,不是仅仅是相同)的对象 ,即假设Set集合中有了一个A对象,现在我要向Set集合再存入一个B对象,但B对象与A对象equals相等,则B对象存储不进去,所以,Set集合的add方法有一个boolean的返回值,当集合中没有某原创 2019-06-13 19:53:17 · 1129 阅读 · 0 评论 -
List 和 Map 区别
一个是存储单列数据的集合,另一个是存储键和值这样的双列数据的集合,List中存储的数据是有顺序,并且允许重复;Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。原创 2019-06-13 19:54:21 · 1875 阅读 · 0 评论 -
ArrayList和Vector的区别
这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,,并且其中的数据是允许重复的,这是HashSet之类的集合的最大不同处,HashSet之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素(本来题目问的与hashset没有任何关系,但为了说清原创 2019-06-13 19:53:49 · 568 阅读 · 0 评论 -
Collection框架中实现比较要实现什么接口
comparable/comparator原创 2019-06-13 19:52:04 · 2447 阅读 · 0 评论 -
collection集合框架简介
Java的集合框架大部分来自java.util包,由一系列接口、实现类组成。Collections:List(Vector、ArrayList、LinkedList);Set(HashSet、TreeSet、LinkedHashSet)。Map:HashMap;Hashtable;TreeMap。习惯上将Java集合框架分为List集合、Set集合和Map集合三种。List集合:适合维护线原创 2019-06-13 14:00:19 · 548 阅读 · 0 评论 -
最有效率的方法算出2乘以8
2 << 3, 因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3。用十进制的方式思考这问题:1乘以100,只需要将1左移2位(即10的2次方)即可。原创 2019-06-13 13:48:06 · 1403 阅读 · 1 评论 -
有两个List,将两个List里的数据作笛卡尔积
List<String> list1 = new ArrayList<String>();list1.add(“A”);list1.add(“B”);list1.add(“C”);List<String> list2 = new ArrayList<String>();list2.add(“D”);list2.add(“E”);list2.add(“F”);输出:AD,AE,AF,BD原创 2019-06-13 20:04:53 · 4308 阅读 · 2 评论 -
java中有几种类型的流
java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。原创 2019-06-13 20:06:44 · 3717 阅读 · 0 评论 -
字节流与字符流的区别
要把一片二进制数据数据逐一输出到某个设备中,或者从某个设备中逐一读取一片二进制数据,不管输入输出设备是什么,我们要用统一的方式来完成这些操作,用一种抽象的方式进行描述,这个抽象描述方式起名为IO流,对应的抽象类为OutputStream和InputStream ,不同的实现类就代表不同的输入和输出设备,它们都是针对字节进行操作的。 在应用中,经常要完全是字符的一段文本输出去或读进来,用字节原创 2019-06-13 20:07:20 · 477 阅读 · 0 评论 -
struts2通过JSON插件实现异步加载ajaxAcion
一、 添加jar包struts2-json-plugin-2.3.4.jarjson-lib-2.3-jdk15.jarezmorph-1.0.6.jar二、 写一个AjaxCheckAction异步加载类//定义一个User的成员变量//给该变量添加getter和setter方法//执行业务操作,将响应数据赋值给该成员变量public class AjaxCheckAction原创 2019-06-13 20:20:57 · 533 阅读 · 0 评论 -
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-(一千零一拾一元整)输出
去零的代码: return sb.reverse().toString().replaceAll("零[拾佰仟]","零").replaceAll("零+万","万").replaceAll("零+元","元").replaceAll("零+","零");public class RenMingBi { private static final char[] data = new ch原创 2019-06-13 20:27:26 · 1091 阅读 · 0 评论 -
一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数
分别统计英文字符的数量,中文字符的数量,和数字字符的数量,假设字符中没有中文字符、英文字符、数字字符之外的其他特殊字符。int engishCount;int chineseCount;int digitCount;for(int i=0;i<str.length;i++) { char ch = str.charAt(i); if(ch>=’0’ && ch<=’9’) {原创 2019-06-13 20:26:59 · 4791 阅读 · 0 评论 -
编一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,
首先要了解中文字符有多种编码及各种编码的特征。 假设n为要截取的字节数。 public static void main(String[] args) throws Exception{ String str = "我a爱中华abc我爱传智def'; String str = "我ABC汉"; int num = trimGBK(str原创 2019-06-13 20:23:29 · 1175 阅读 · 0 评论 -
编写一个程序,将djava目录下的所有.java文件复制到djad目录下,并将原来文件的扩展名从.java改为.jad
listFiles方法接受一个FileFilter对象,这个FileFilter对象就是过虑的策略对象,不同的人提供不同的FileFilter实现,即提供了不同的过滤策略。import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FilenameFilter原创 2019-06-13 20:23:09 · 533 阅读 · 0 评论 -
编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔
package cn.itcast;import java.io.File; import java.io.FileReader; import java.io.FileWriter;public class MainClass{ public static void main(String[] args) throws Exception{ FileManager原创 2019-06-13 20:22:41 · 713 阅读 · 0 评论 -
struts2通过stream流实现异步加载ajaxAcion
一、 写一个AjaxCheckAction异步加载类//定义一个InputStream类型的成员变量//给该变量添加getter和setter方法//执行业务操作,将响应数据赋值给该成员变量public class AjaxCheckAction { private String userName; private InputStream inputStream;原创 2019-06-13 20:21:45 · 1378 阅读 · 0 评论 -
struts2实现国际化
Java程序的国际化思路: 1. 将程序中的提示信息、错误信息等放在资源文件中,为不同国家/语言编写对应资源文件; 2. 资源文件由很多key-value对组成,key保持不变,value随国家/语言不同而不同; 3. 这些资源文件使用共同的基名,通过在基名后边加语言代码、国家和地区代码来进行区分。ApplicationResources_en_propertiesApplicatio原创 2019-06-13 20:19:41 · 413 阅读 · 0 评论 -
能不能自己写个类,也叫java.lang.String
可以,但在应用的时候,需要用自己的类加载器去加载,否则,系统的类加载器永远只是去加载jre.jar包中的那个java.lang.String。由于在tomcat的web应用程序中,都是由webapp自己的类加载器先自己加载WEB-INF/classess目录中的类,然后才委托上级的类加载器加载,如果我们在tomcat的web应用程序中写一个java.lang.String,这时候Servlet程序加原创 2019-06-13 20:18:33 · 8571 阅读 · 4 评论 -
java中会存在内存泄漏吗
所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中。java中有垃圾回收机制,它可以保证一对象不再被引用的时候,即对象编程了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉。由于Java 使用有向图的方式进行垃圾回收管理,可以消除引用循环的问题,例如有两个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的,java中的内存泄露的情况:长生命周期的对象持有短生命周期对原创 2019-06-13 20:17:54 · 815 阅读 · 0 评论 -
通过OGNL表达式取得数值
一、数组、集合<s:iterator value="ulist" id="u" status="index"><s:if test="#index.first"><span style="color:red;"><s:property value="#index.index"/><s:property value="userName"/><s:property value="age"/><b原创 2019-06-13 20:17:22 · 949 阅读 · 0 评论 -
struts2中重写框架类型转换类StrutsTypeConverter建一个时间转换工具
一、 新建自动转换工具配置文件xwork-conversion.properties内容:java.util.Date=util.DateConvert二、 util/DateConvert类//继承系统StrutsTypeConverter类public class DateConvert extends StrutsTypeConverter { private final S原创 2019-06-13 20:16:57 · 389 阅读 · 0 评论 -
struts2中通过集合接收、输出数据
一、前台JSP页面<form action="hobby.action"> 1姓名:<input type="text" name="userList[0].userName" /> 1年龄:<input type="text" name="userList[0].age" /><br> 2姓名:<input type="text" n原创 2019-06-13 20:16:01 · 2069 阅读 · 0 评论 -
struts2在页面输出类型转换错误
一、 1、src下添加配置文件message.propertieskey:xwork.default.invalid.fieldvaluevalue:字段"{0}"无效2、在struts.xml配置文件添加:<constant name="struts.custom.i18n.resources" value="message"/>3、action继承ActionSupport类,这样就有原创 2019-06-13 20:15:14 · 568 阅读 · 0 评论 -
什么时候用assert
assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,assert将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertio原创 2019-06-13 20:14:39 · 771 阅读 · 0 评论 -
垃圾回收器的基本原理
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。垃圾回收的优点和原理。并考虑2种回收机制Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存原创 2019-06-13 20:09:51 · 7885 阅读 · 0 评论 -
什么是内部类?Static Nested Class 和 Inner Class的不同
内部类就是在一个类的内部定义的类,内部类中不能定义静态成员(静态成员不是对象的特性,只是为了找一个容身之处,所以需要放到一个类中而已,这么一点小事,你还要把它放到类内部的一个类中,过分了啊!提供内部类,不是为让你干这种事情,无聊,不让你干。我想可能是既然静态成员类似c语言的全局变量,而内部类通常是用于创建内部对象用的,所以,把“全局变量”放在内部类中就是毫无意义的事情,既然是毫无意义的事情,就应该被原创 2019-06-13 13:49:32 · 2561 阅读 · 3 评论 -
面向对象的特征
面向对象的编程语言有封装、继承 、抽象、多态等4个主要的特征。 封装: 封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。在面向对象的编程语言中,对象是封装的最基本单位,面向对象的封装比传统语言的封装更为清晰、更为有力。面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个“模块”中,也就是一个类中,属性用变量定原创 2019-06-13 13:49:21 · 312 阅读 · 0 评论 -
sleep() 和 wait() 有什么区别
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,将执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。) sleep就是正在原创 2019-06-13 13:52:38 · 343 阅读 · 0 评论 -
java中有几种方法可以实现一个线程?用什么关键字修饰同步方法 stop()和suspend()方法为何不推荐使用?
java5以前,有两种实现方法,分别使用new Thread()和new Thread(runnable)形式,第一种继承Thread类,直接调用thread的run方法,所以,我们往往使用Thread子类,即new SubThread()。第二种是实现Runnable接口,调用runnable的run方法。第一种: new Thread(){}.start();这表示调用Thread子类对象的ru原创 2019-06-13 13:52:29 · 3301 阅读 · 0 评论 -
error和exception有什么区别
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。原创 2019-06-13 13:52:02 · 452 阅读 · 0 评论