AllenWang的个人博客

小楼一夜听春雨


  • 首页

  • 分类

  • 归档

  • 标签

  • menu.ad

深刻理解Java中的String、StringBuffer和StringBuilder的区别

发表于 2015-10-13 | 分类于 java

引言

首先简单地来梳理一下Java中String、StringBuffer和StringBuilder各自的含义。

1.String类

首先,它是线程安全的,即可以用于多线程编程中;

其次,String类的对象是不可变的,即在定义时就确定了,类似String str=”Hello”;str+=”Java”;的语句其实是生成了新的对象,只是我们未察觉到而已。但是注意在大量的字符串新建对象时消耗就很可观,这时必须考虑采用StringBuffer或StringBuilder,否则会极大地降低程序的效率

阅读全文 »

Java中的null对象也可以访问static成员变量和方法

发表于 2015-10-13 | 分类于 java

引言

一般来说,一个类的对象要在实例化之后才可以访问类中的成员变量和方法。如果它还是null,通常意义上我们就认为它不能访问类中的成员。实际上确实不提倡这样,而且null对象确实不能访问实例成员(变量和方法),否则会引发NULLPointerException错误。但是要注意的一点是:即使是null对象,也可以访问类成员。看下面一段代码的输出结果即知

阅读全文 »

深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因

发表于 2015-10-13 | 分类于 java

引言

Java中final的作用主要表现在三方面:修饰变量、修饰方法和修饰类。下面就从这两个方面来讲解final的作用。在文末从final及类的设计安全性出发,论述了Java中String为何要被设计成不可变类。

1.final修饰变量

final修饰变量时与C++中的const作用类似,即如果是基本类型变量,则表示其值不能改变;如果是引用类型变量,则表示其一旦初始化,就不能再指向别的对象,但是注意它指向的对象本身的值可以改变(其实这一点也跟C++中的常指针很像)。看下面一个例子

阅读全文 »

Java中内部类揭秘(一):外部类与非静态内部类的'相互可见性'

发表于 2015-10-13 | 分类于 java

引言

我们都知道,非静态内部类可以访问外部类的私有成员(包括私有变量和方法),这也正是使用非静态内部类与普通类的一个重要区别:非静态内部类是依赖于外部类对象而存在的,这种依赖就包括它要能自由地访问外部类对象的所有成员(因为private成员都可以访问了,其他权限的成员更不在话下。不过一般来说一个内部类只会访问外部类的部分成员而不是全部)。比如

阅读全文 »

Java中初始化块的真实作用

发表于 2015-10-13 | 分类于 java

引言

对于普通的类而言,可以放在初始化块中的初始化工作其实完全可以放到构造函数中进行,只不过有时会带来些许不便,如有多个构造器,就要在多个地方加上初始化函数完成初始化工作,而如果放到初始化块中的话则只要写一次即可。如下例所示

阅读全文 »

Java中的枚举类为何不能有public构造器

发表于 2015-10-13 | 分类于 java

引言

从Java 5开始有了枚举类,需要注意的是enum定义的类默认继承的是java.lang.Enum类而不是Object类。同时注意枚举类不能派生子类(类的默认修饰符为final),其原因基于它只有private构造器,那为什么要设计成这样呢?

其实很容易想明白,所谓枚举类就是有包含有固定数量实例(并且实例的值也固定)的特殊类,如果其含有public构造器,那么在类的外部就可以通过这个构造器来新建实例,显然这时实例的数量和值就不固定了,这与定义枚举类的初衷相矛盾,为了避免这种形象,就对枚举类的构造器默认使用private修饰。如果为枚举类的构造器显式指定其它访问控制符,则会编译出错。

另外,注意枚举类的所有实例必须在其首行显式列出,否则它不能产生实例。如下是一个使用枚举类的经典示例:

import java.util.*;

enum Planet
{
  MERCURY,VENUS,EARTH,MARS,JUPITER,SATURN,URANUS,NEPTUNE
}

public class EnumSample
{
   public void flyTo(Planet planet)
   {
     String destination="";
     switch(planet)
     {
       case MERCURY:
          destination="水星";
          break;
       case VENUS:
          destination="金星";
          break;
       case EARTH:
          destination="地球";
          break;
       case MARS:
          destination="火星";
          break;
       case JUPITER:
          destination="木星";
          break;
       case SATURN:
           destination="土星";
           break;
       case URANUS:
           destination="天王星";
           break;
       case NEPTUNE:
           destination="海王星";
           break;
      }
      System.out.println("The destination is "+destination);
    }
  public static void main(String[]args)
  {
     EnumSample sample=new EnumSample();
     sample.flyTo(Planet.NEPTUNE);
   }
}

Android中利用命令行进行截屏并导出到电脑上

发表于 2015-10-13 | 分类于 android

引言

大多数人最常用的截屏方法可能就是利用手机的快捷按键了,但是那样如果要导入到电脑中效率会比较低。实际上有更好的截屏方式,最简单的当然就是利用Eclipse中的DDMS进行截屏了,点击“Screen Capture”按钮后等待10多秒,然后就可直接利用Save按钮保存到电脑中。

显然,由于要进行图片显示的原因,在DDMS中会有一定的延迟

阅读全文 »

畅销书对Java中Iterator的理解误区

发表于 2015-10-13 | 分类于 java

引言

最近放假,闲来无事,便翻看以前看过的一些书,竟然发现有些书本(甚至是一些畅销书)对Java中Iterator有很大的误解,比如某畅销书在Collection那一章有这么一句话:“当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给了迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合元素本身没有任何影响。”

我们先看它举的例子,代码如下

阅读全文 »

利用命令行引用外部jar包以使程序正常运行的4种方法

发表于 2015-10-13 | 分类于 java

引言

平时写一些小的Java Demo时我比较喜欢用UltraEdit或记事本写完后,直接利用命令行进行编译和运行。这样的好处就是方便快捷。相信有这个习惯的人应该还大有人在。但是如果要引用外部jar包,应该如何操作呢?在写JDBC的一些Demo时,由于要利用jar包来加载相应的数据库,每个Demo都用到了外部jar包,所以特地总结了一下利用命令行引用外部jar包的方法,归纳起来有以下4种

阅读全文 »

深刻理解Java中形参与实参,引用与对象的关系

发表于 2015-10-13 | 分类于 java

引言

我们都知道,在Java中,除了基本数据类型之外,其他的都是引用类型,当它们作为函数参数时,传递的也是引用,通过引用可以改变对象的值,很多人便因此而忽略形参与实参,引用与对象的关系问题。废话不多说,先看下面一个例子

阅读全文 »
1…111213…16
Allen Wang

Allen Wang

152 日志
25 分类
8 标签
© 2018 Allen Wang
由 Hexo 强力驱动
主题 - NexT.Muse