关于java的java char占几个字节问题

关于JAVA课程的几个问题1现在学哪些什么内容比较好(特别是We - 爱问知识人
(window.slotbydup=window.slotbydup || []).push({
id: '2491531',
container: s,
size: '150,90',
display: 'inlay-fix'
关于JAVA课程的几个问题
,哪个比较好?)
2 JAVA 课程在上海有哪些学校比较好的?价格和时间在多少比较合理
谢谢
1 现在学哪些什么内容比较好(特别是Web和手机,哪个比较好?)
学Java主要是向J2EE做企业级的开发上发展,就目前来看Java相关的要学习的内容比较多例如ORM Hibernate,struts,EJB,jsp,还有SPring等.如果问是做WEB好,还是嵌入式开发好,这个问题不是Java的问题,而是讲以后软件的发展趋式,也以用不了几年就会出来几百元的PC用于上网,到那时软件只针对服务器端做的,从而提供服务。反过来说要么去做WEB开发,要么去做嵌入式开发。Java主要是做中间件。当然做WEB开发除J2EE外还有很多,比如说 ,PHP,还有最近爆长的Ruby on Rails。但是各有不同J2EE很强但是开发成本高,上手慢。 微软的产品很难说服别人用这个搞企业级,PHP5不错,但是PHP技术在99年的时候很火,但是没有连接池的概念,也没有Java模式这种概念,但是上手快。Ruby比Java能够节省5分之一的开发时间,以上是针对Web开发。
JAVA 课程在上海有哪些学校比较好的?价格和时间在多少比较合理
从J2SE开始学,外边学的话一般9000元吧。时间6个月吧。
1 现在学哪些什么内容比较好(特别是Web和手机,哪个比较好?)
学Java主要是向J2EE做企业级的开发上发展,就目前来看Java相关的要学习的内容比较多例如...
界面不必多说,说个简单实现的原理,
根据日期和课程(周一第一节、周二第三节)做一个二维排序,根据对应位置信息存储,然后读取系统时间,根据时间选择对应二维表,突...
给你个例子自己看吧,src目录中是源代码。这个是一个简单的银行系统,登录推出这些和你说的一样,其他的照这个样子做就可以
这没必要强求的,孩子到时候自己就会想起来坐的,坐十分钟就要歇会的,每天大概三,四次就可以了
要学的多了。建议先学好java编程是关键,其他就是学一个到两个数据库。这两个学好了,对初学者来说找是有很大好出的。学多了。学不完。
大家还关注一个关于,数据类型异常的有关问题 - Java相关当前位置:& &&&一个关于,数据类型异常的有关问题一个关于,数据类型异常的有关问题&&网友分享于:&&浏览:0次请教大家一个关于,数据类型错误的问题
编译软件提示
The&method&readInt()&in&the&type&DataInputStream&is&not&applicable&for&the&arguments&(int)
import&java.io.DataInputS
import&java.io.DataOutputS
import&java.io.FileInputS
import&java.io.FileOutputS
&&public&class&ArrayTest&{
&&public&static&void&main(&String&args[]&)&{
&&&&int&data[]&=&{100,101,102,103,104,105};
&&&&int&t;
{&DataOutputStream&out&=&new&&DataOutputStream&(new&&FileOutputStream("C:\\Dest.txt"));
&&for(int&i=0;i&data.i++)&
&&&&out.writeInt(data[i]);
&&out.close();
&DataInputStream&in&=&new&&DataInputStream&(new&&FileInputStream("C:\\Dest.txt"));
&for(int&i=&data.length-1;i&=&0;i--)&{
&&&&t=in.readInt(int&data[i]);
&&&&System.out.print("&"+t);
&&System.out.println(&);
&&in.close();
}catch(&e)
{&System.out.println(e.getMessage());}
------解决思路----------------------看下API,readInt是不需要参数的
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 1234567891011 Copyright & &&版权所有在Java编码中,我们容易犯一些错误,也容易疏忽一些问题,因此笔者对日常编码中曾遇到的一些经典情形归纳整理成文,以共同探讨。
1. 纠结的同名
很多类的命名相同(例如:常见于异常、常量、日志等类),导致在import时,有时候张冠李戴,这种错误有时候很隐蔽。因为往往同名的类功能也类似,所以IDE不会提示warn。
写完代码时,扫视下import部分,看看有没有不熟悉的。替换成正确导入后,要注意下注释是否也作相应修改。
命名尽量避开重复名,特别要避开与JDK中的类重名,否则容易导入错,同时存在大量重名类,在查找时,也需要更多的辨别时间。
2. 想当然的API
有时候调用API时,会想当然的通过名字直接自信满满地调用,导致很惊讶的一些错误:
示例一:flag是true?
boolean flag = Boolean.getBoolean("true");
可能老是false。
示例二:这是去年的今天吗(今年是2012年,不考虑闰年)?结果还是2012年:
Calendar calendar = GregorianCalendar.getInstance();
calendar.roll(Calendar.DAY_OF_YEAR, -365);
下面的才是去年:
calendar.add(Calendar.DAY_OF_YEAR, -365);
问自己几个问题,这个方法我很熟悉吗?有没有类似的API? 区别是什么?就示例一而言,需要区别的如下:
Boolean.valueOf(b) VS Boolean.parseBoolean(b) VS Boolean.getBoolean(b);
名字起的更详细点,注释更清楚点,不要不经了解、测试就想当然的用一些API,如果时间有限,用自己最为熟悉的API。
3. 有时候溢出并不难
有时候溢出并不难,虽然不常复现:
long x=Integer.MAX_VALUE+1;
System.out.println(x);
x是多少?竟然是-,明明加上1之后还是long的范围。类似的经常出现在时间计算:
数字1×数字2×数字3…
在检查是否为正数的参数校验中,为了避免重载,选用参数number, 于是下面代码结果小于0,也是因为溢出导致:
Number i=Long.MAX_VALUE;
System.out.println(i.intValue()&0);
让第一个操作数是long型,例如加上L或者l(不建议小写字母l,因为和数字1太相似了);
不确定时,还是使用重载吧,即使用doubleValue(),当参数是BigDecimal参数时,也不能解决问题。
对数字运用要保持敏感:涉及数字计算就要考虑溢出;涉及除法就要考虑被除数是0;实在容纳不下了可以考虑BigDecimal之类。
4. 日志跑哪了?
有时候觉得log都打了,怎么找不到?
示例一:没有stack trace!
} catch (Exception ex) {
log.error(ex);
示例二:找不到log!
} catch (ConfigurationException e) {
e.printStackTrace();
替换成log.error(ex.getMessage(),ex);
换成普通的吧,而不是System.out。
API定义应该避免让人犯错,如果多加个重载的log.error(Exception)自然没有错误发生
在产品代码中,使用的一些方法要考虑是否有效,使用e.printStackTrace()要想下终端(Console)在哪。
在DCL模式中,总是忘记加一个Volatile。
private static CacheI
//lose volatile
public static CacheImpl getInstance() {
if (instance == null) {
synchronized (CacheImpl.class) {
if (instance == null) {
instance = new CacheImpl ();
毋庸置疑,加上一个吧,synchronized 锁的是一块代码(整个方法或某个代码块),保证的是这”块“代码的可见性及原子性,但是instance == null第一次判断时不再范围内的。所以可能读出的是过期的null。
我们总是觉得某些低概率的事件很难发生,例如某个时间并发的可能性、某个异常抛出的可能性,所以不加控制,但是如果可以,还是按照前人的“最佳实践”来写代码吧。至少不用过多解释为啥另辟蹊径。
6. 不要影响彼此
在释放多个IO资源时,都会抛出IOException ,于是可能为了省事如此写:
public static void inputToOutput(InputStream is, OutputStream os,
boolean isClose) throws IOException {
BufferedInputStream bis = new BufferedInputStream(is, 1024);
BufferedOutputStream bos = new BufferedOutputStream(os, 1024);
if (isClose) {
bos.close();
bis.close();
假设bos关闭失败,bis还能关闭吗?当然不能!
虽然抛出的是同一个异常,但是还是各自捕获各的为好。否则第一个失败,后一个面就没有机会去释放资源了。
代码/模块之间可能存在依赖,要充分识别对相互的依赖。
7. 用断言取代参数校验
如题所提,作为防御式编程常用的方式:断言,写在产品代码中做参数校验等。例如:
private void send(List& Event& eventList)
assert eventList !=
换成正常的统一的参数校验方法。因为断言默认是关闭的,所以起不起作用完全在于配置,如果采用默认配置,经历了eventList != null结果还没有起到作用,徒劳无功。
有的时候,代码起不起作用,不仅在于用例,还在于配置,例如断言是否启用、log级别等,要结合真实环境做有用编码。
8. 用户认知负担有时候很重
先来比较三组例子,看看那些看着更顺畅?
public void caller(int a, String b, float c, String d) {
methodOne(d, z, b);
methodTwo(b, c, d);
public void methodOne(String d, float z, String b)
public void methodTwo(String b, float c, String d)
public boolean remove(String key, long timeout) {
Future& Boolean& future = memcachedClient.delete(key);
public boolean delete(String key, long timeout) {
Future& Boolean& future = memcachedClient.delete(key);
public static String getDigest(String filePath, DigestAlgorithm algorithm)
public static String getDigest(String filePath, DigestAlgorithm digestAlgorithm)
保持参数传递顺序;
remove变成了delete,显得突兀了点, 统一表达更好;
保持表达,少缩写也会看起来流畅点。
在编码过程中,不管是参数的顺序还是命名都尽量统一,这样用户的认知负担会很少,不要要用户容易犯错或迷惑。例如用枚举代替string从而不让用户迷惑到底传什么string, 诸如此类。
9. 忽视日志记录时机、级别
存在下面两则示例:
示例一:该不该记录日志?
catch (SocketException e)
LOG.error("server error", e);
throw new ConnectionException(e.getMessage(), e);
示例二:记什么级别日志?
在用户登录系统中,每次失败登录:
LOG.warn("Failed to login by "+username+");
移除日志记录:在遇到需要re-throw的异常时,如果每个人都按照先记录后throw的方式去处理,那么对一个错误会记录太多的日志,所以不推荐如此做;但是如果re-throw出去的exception没有带完整的trace( 即cause),那么最好还是记录下。
如果恶意登录,那系统内部会出现太多WARN,从而让管理员误以为是代码错误。可以反馈用户以错误,但是不要记录用户错误的行为,除非想达到控制的目的。
日志改不改记?记成什么级别?如何记?这些都是问题,一定要根据具体情况,需要考虑:
是用户行为错误还是代码错误?
记录下来的日志,能否能给别人在不造成过多的干扰前提下提供有用的信息以快速定位问题。
10. 忘设初始容量
在JAVA中,我们常用Collection中的Map做Cache,但是我们经常会遗忘设置初始容量。
cache = new LRULinkedHashMap& K, V&(maxCapacity);
初始容量的影响有多大?拿LinkedHashMap来说,初始容量如果不设置默认是16,超过16×LOAD_FACTOR,会resize(2 * table.length),扩大2倍:采用 Entry[] newTable = new Entry[newCapacity]; transfer(newTable),即整个数组Copy, 那么对于一个需要做大容量CACHE来说,从16变成一个很大的数量,需要做多少次数组复制可想而知。如果初始容量就设置很大,自然会减少resize, 不过可能会担心,初始容量设置很大时,没有Cache内容仍然会占用过大体积。其实可以参考以下表格简单计算下, 初始时还没有cache内容, 每个对象仅仅是4字节引用而已。
memory for reference fields (4 bytes each);
memory for primitive fields
Bytes required
不仅是map, 还有stringBuffer等,都有容量resize的过程,如果数据量很大,就不能忽视初始容量可以考虑设置下,否则不仅有频繁的 resize还容易浪费容量。
在Java编程中,除了上面枚举的一些容易忽视的问题,日常实践中还存在很多。相信通过不断的总结和努力,可以将我们的程序完美呈现给读者。
在文章中找不到问题答案?您还可以
热门栏目订阅Java基础知识(21)
&下面是stackoverflow关于Java集合方面讨论最多的几个问题,在这里整理出来供大家参考。
1.关于LinkList和ArrayList
:内部实现是个数组,其中的元素可以通过index获取。但是,如果一个数组满了的话,我们就必须重新分配一个更大的数组然后把所有元素移动到这个新数组,其时间复杂度为O(n)。添加或删除一个元素时也需要移动数组中的其它元素。这就是ArrayList的缺点。:是一个双向链表。因此如果我们要获取中间元素的话,我们就需要从头开始遍历;另一方面,添加或删除一个元素就变得很简单,因为只需要对这个链表本身操作即可。
& & 总的来说,最坏的情况下两者时间复杂度的对比如下:
| Arraylist | LinkedList
------------------------------------------
get(index)
add(E, index)
remove(index)
Iterator.remove() |
Iterator.add(E)
& & 除了考虑时间复杂度之外,当List比较大时,空间复杂度也不可忽略:
LinkList:每个节点还需要额外的两个指针,分别指向前一个节点和下一个节点ArrayList:只需要一个数组
2.最有效移除集合元素的方式
& & 唯一正确的移除集合元素的方式就是使用Iterator.remove()方法:
Iterator&Integer& itr = list.iterator();
while(itr.hasNext()) {
// do something
itr.remove();
下面这种处理方式是错误的,会报出这么一个异常:ConcurrentModificationException
for(Integer i: list) {
list.remove(i);
}3.如何将一个List转换成一个int[] 数组?
最简单的方式就是使用工具包下的:
int[] array = ArrayUtils.toPrimitive(list.toArray(new Integer[0]));
如果用jdk的话是没有捷径的,注意我们不能使用List.toArray()方法,因为这样得到的是Integer[],正确的方法应该是:int[] array = new int[list.size()];
for(int i=0; i & list.size(); i++) {
array[i] = list.get(i);
4.如何将int[] 转换成List?
和上面类似,我们可以使用ArrayUtils工具类:
List list = Arrays.asList(ArrayUtils.toObject(array));
或者依然没有捷径:int[] array = {1,2,3,4,5};
List&Integer& list = new ArrayList&Integer&();
for(int i: array) {
list.add(i);
}5.最好的过滤集合的方法?
当然,最方便最好的方式就是使用第三方jar包,比如
,这两者都提供了filter()方法。在jdk中,事情就变得没那么简单了(不过Java8已经支持了),但是在Java8之前,比较通常的方式是我们必须遍历集合中的所有元素:Iterator&Integer& itr = list.iterator();
while(itr.hasNext()) {
int i = itr.next();
if (i & 5) { // filter all ints bigger than 5
itr.remove();
但是我们可以模拟 和,通过引入一个新的接口,这是很多高级工程师的方法:public interface Predicate&T& {
boolean test(T o);
public static &T& void filter(Collection&T& collection, Predicate&T& predicate) {
if ((collection != null) && (predicate != null)) {
Iterator&T& itr = collection.iterator();
while(itr.hasNext()) {
T obj = itr.next();
if (!predicate.test(obj)) {
itr.remove();
}filter(list, new Predicate&Integer&() {
public boolean test(Integer i) {
return i &= 5;
});6.把List转换成Set的最简单的方式有两种方式:Set&Integer& set = new HashSet&Integer&(list);Set&Integer& set = new TreeSet&Integer&(aComparator);
set.addAll(list);7.如何移除ArrayList中的重复元素
和上面方法类似,如果不关心顺序的话:ArrayList** list = ... // initial a list with duplicate elements
Set&Integer& set = new HashSet&Integer&(list);
list.clear();
list.addAll(set);
如果关心顺序,把上面那个HashSet换成LinkedHashSet即可。
8.给集合排序
给集合排序的实现方法有很多种
1.Collections.sort():进行一次排序
2.&:始终保持队列的顺序,但是只能从队列的头获取元素
3.:始终保持队列的顺序,元素不重复,你可以从最顶端或最低端获取元素,但也不能随机获取元素
9.Collections.emptyList() vs new Instance
上面两个方法都会返回空的List,但是Collections.emptyList()返回的List是不可变的,每次方法调用不会重新创建一个实例,而是复用原来的实例(即单例模式),所以这样效率会高些。
10.Collections.copy
有两种方式复制一个List,第一种:ArrayList&Integer& dstList = new ArrayList&Integer&(srcList);
第二种是利用Collections.copy()方法:ArrayList&Integer& dstList = new ArrayList&Integer&(srcList.size());
Collections.copy(dstList, srcList);
那两者有何区别呢?
如果目标集合(dstList)小于源集合,使用Collections.copy()会抛出IndexOutOfBoundsException,那它有什么好处呢?首先它保证运行效率和集合大小线性相关,第二就是可以实现集合的重用。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:198127次
积分:3013
积分:3013
排名:第8653名
原创:91篇
转载:12篇
评论:50条
阅读:11072
阅读:1205
文章:10篇
阅读:25357
(1)(5)(5)(5)(9)(3)(1)(4)(12)(9)(1)(1)(1)(1)(5)(2)(4)(10)(7)(3)(5)(7)(1)(3)(1)
本人现任职于中国电信集团云公司,负责大数据能力平台建设与运营相关工作
gitHub地址:关于java创建对象的问题,一直不明白,这里到底创建了几个对象? java的继承到底是怎样实现的
每个步骤都是先父类后子类。要创建类的对象,必须先加载这两个类,此时会执行两个静态初始化块,输出A3 B3然后执行new B()创建B的实例,仍然先父后子。B的构造器中没有显式调用父类A的构造器,系统会自动调用A的无参构造器。A也一样,先创建它的父类Object的实例。new Object()无输出。new A()时先调用初始化块,再执行构造器,输出A2 A1。最后才轮到B,输出B2 B1
已有帐号?
无法登录?
社交帐号登录}

我要回帖

更多关于 java中汉字占几个字节 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信