Archive for the 'Techniques' Category

Java中println函数的陷阱

前几日在学习Java的时候我家Smigoo遇到了一个小麻烦,怎么调试都无法通过,因此向我求救。在看了代码之后我也糊涂了,一时找不出问题出在什么地方。源代码如下,目的是为了测试代码点和代码单元的不同。

public class AA
{
    public static void main (String[] args)
    {
        String greeting=”hello”;
        int n=greeting.length();
        int m=greeting.codePointCount(0,greeting.length());
        System.out.println(n,m);
    }
}

一开始使用Notepad++编写源代码进行编译也是一样无法通过,奇怪了,JDK返回如下的错误。

Read more »

Java中的类(二)

明天和老婆要去杭州了,今天把Java教程更新一下。接上一篇,继续讲解Java中的类。

上次结尾说到Java类的构造器。构造器有几个特性:

构造器与类同名
每个类可以拥有一个以上的构造器
构造器可以有多个参数
构造器没有返回值
构造器总是伴随new运算符一同使用

构造器与类同名,这是Java规范就这么定义的,没有什么好解释的。每个类可以拥有一个以上的构造器,但是构造器只能伴随着new运算符使用一次,因此只能调用一个构造器。那为什么可以拥有多个构造器?原因在于每个构造器中参数数量已能相同,因此传递给构造器相应数量的参数,就会调用拥有相应数量参数的构造器。因此可以为参数数量不定的情况设计多个构造器,而在运行时自动调用。默认情况下,我给构造器传递参数则会调用默认的没有参数的构造器。

Read more »

Java中的类(一)

面向对象编程最大的体现就是类。Java是完全面向对象(OOP,Object Oriented Programming)的编程语言,任何程序都是基于类。面向对象编写的程序是由对象组成的,这些对象有自己的属性和能够执行的操作。

Java中所有的代码都写于类的内部。可以把类看成生产汽车的模型,只要根据模型就可以生产同样型号的成品汽车,成品可以有很多了,而模型只需要有一个。类也是如此,可以实例化一个类而生成一个“成品的”对象。更细一点看,可以把发动机与变速箱看作两个不同的类,各自有不同的构造和功能,而之间也可以相互协作。同样,不同的类之间也能互相操作。

Java中使用class关键字声明一个类,其后跟着类名。类名的首字母必须大写,类名中不能含有空格,建议类名中每个单词的首字母都进行大写。一个基本的类定义形式为:

class ClassName{
    constructor    //构造器
    …
    method    //方法
    …
    field    //域
    …
}

Read more »

Java中的运算符与控制流程

Java中的运算符与其他大多数语言的运算符基本一致,作用相差不大。同一个级别的运算符以从左向右的顺序运算,右结合的运算符除外。

运算符 结合性
[] . () (方法调用) 从左向右
! ~ ++ — +(一元运算) -(一元运算) ()(强制类型转换) new 从右向左
* / % 从左向右
+ - 从左向右
<< >> >>> 从左向右
< <= > >= instanceof 从左向右
== != 从左向右
& 从左向右
^ 从左向右
| 从左向右
&& 从左向右
|| 从左向右
?: 从右向左
= += -= *= /= %= &= |= ^= <<= >>= >>>= 从右向左

 

Java中没有C++中的逗号运算符,不过可以在for语句中使用逗号运算符分隔表达式列表。另外在函数参数中也可以使用逗号分隔多个参数。

Java中使用if关键字作为条件语句,格式为

if (condition) statement

Read more »

Java中的变量

上次说过Java是强类型语言,每一个变量属于一种数据类型。在声明变量时,变量类型在前,变量名在后。比如:

int speed;
Date today;

在Java中,声明一个变量是一条完整的语句,所以需要在每一个生命结束后添加分号表示语句的结束。(所有程序语言中使用的标点符号均是英文标点)

Java中变量名必须是以字母或者下划线开头的字母或者数字序列。但是Java中允许的字母范围比其他的编程语言都要大,在Java中变量名中的字母不仅可以是英文字母,也可以是法文,德文或者希腊文中的字母,可以是任何Unicode字母。但是不能包含空格以及一些特殊符号,比如’+'和’©’都是非法的。另外Java是对大小写敏感的,且对变量名长度没有限制。

声明一个Java变量之后,如果需要使用变量就必须先要对变量进行初始化赋值。语法与大多数编程语言类似。比如:

int speed=120;

Java中使用final关键字声明常量(在ActionScript等语言中使用const关键字声明一个常量,在Java中const是保留关键字,但是并未被使用),常量只能被赋值一次,之后就不能再做更改。惯例上常量使用大写字母。声明常量的方法:

final double GRAVITY=9.8;

另外,如果希望某个常量属于类(通过类调用)而不是通过类的实例,就可以把常量声明为静态常量。Java中使用static来声明静态类型。例如:

class Earth{
    public static void main(String[] args){
        System.out.println(”The gavity of Earth is “+GRAVITY);
    }
    public static final double GRAVITY=9.8;    //声明静态常量
}

调用静态常量的方法是类名加’.'加常量名,比如:

Earth.GRAVITY;

未完待续…

Java中的数据类型

昨天老婆说我的BLOG很久没有更新了,所以今天就来更新一下。就从Java开始,今天讲数据类型。

Java是一种强类型的语言,因此必须为每一个变量声明类型。在Java中,一共有8种基本数据类型:4种整型,int,short,long,byte,两个浮点型,float,double,一个char类型和一个boolean(布尔)类型。

类型

存储需求

取值范围

int

4byte

-2147483648~2147483647

short

2byte

-32768~32767

long

8byte

-9223372036854775808~9223372036854775807

byte

1byte

-128~127

float

4byte

±3.40282347E+38F

double

8byte

±1.79769313486231570E+308

在程序中应该尽可能的使用占用内存小的数据类型。通常情况下使用int就足够了,但是在某些场合,比如描述中国的口int型就不够用了,需要使用long类型。

char类型表示单字节的字符,表示英文字母的话一个char类型只能表示一个,这和C当中的char类型是一样的。不建议在Java程序中使用char类型,原因复杂,以后再说。在Java基本类型中没有类似于ActionScript中的String类型,倒是有String对象,实际上String对象的字符串就是由char类型组成,可以理解为char类型的数组。不过Java中String类已经在JDK中,开发者不必关心它的具体实现。

boolean布尔类型只有两个值:true和false,也就是逻辑类型,用来判断逻辑条件。

在Java中基本数据类型采用值传递,其他的数据类型采用的是地址引用。这点在包括ActionScript在内的大多数程序设计语言中都是一样的。基本数据类型中各变量中的数据保持独立,互相之间的赋值有复制内容的效果。而地址引用引用的是对象在内存中的地址,因此多个变量可以引用同一个地址,所以通过一个变量改变数值会影响到所有饮用该地址的变量。

未完待续,日期不定

解决SONY笔记本Windows边栏启动的问题

笔记本买来快半年了,Windows边栏从来没有用过。一开始是因为无法启动,总是提示Windows边栏由管理员管理,对我的用处不大,也就淡忘了。

最近无意间想到了这个功能,决定研究一下解决的方法。最后发现解决方法其实很简单,关键就在于注册表中的一个键值。在运行中输入“regedit”进入注册表,展开[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Windows\Sidebar],右边会有一个TurnOffSidebar的二进制键值,只需要把1改成0就可以了,或者干脆删除,不用重新启动就能生效。

上网查了一下,不能启动Windows边栏好像是很多SONY笔记本的通病。因为SONY预装了Google边栏,所以就屏蔽了Windows边栏,不过感觉还是Windows自带的比较好一些。不论是否为SONY笔记本,都可以通过这个二进制键值来控制Windows边栏,不过我觉得没有什么实际用途。

你需要多长时间打开这个网页?

做个调查,了解一下打开我的这个BLOG需要多长时间。因为使用的是美国的服务器,所以速度要比国内的慢一些,有必要优化一下提高打开的速度。希望大家都来帮助我完成这项工作,包括各位潜水员也能积极参与。谢谢。

BLOG升级

WordPress 2.5正式版发布已经有一段时间了,我却迟迟没有更新。原因在于全新架构的正式版多少会有一些BUG,等修复过BUG的升级版出来更合适。

终于WordPress 2.5.1已经发布,修复了不少的BUG,我也打算升级BLOG了。刚升级没有多久,具体有哪些方面的更新还不清楚,需要一段时间的使用才能知晓。前台方面没有变化,而后台方面要比原来的2.3的版本要好看多了,功能上也要更为方便,不过Permalink功能我还是找了半天才找到,后来发现的确是很方便的设计。

还不清楚Windows Live Writer能否兼容WordPress 2.5.1,反正后面的日志会继续使用WLW来发布的,这样比打开浏览器登陆之后写更方便。我还是比较喜欢本地的东西,比如本地的RSS阅读器,大概是我的习惯吧。

BLOG后台管理界面

收到百度Hi的邀请

昨天晚上照例检查邮件,收到了百度发来的百度Hi邀请。百度Hi是百度的即时聊天软件,就是和QQ还有MSN一样的东西,百度Hi的消息应该很多人早已知晓。我收到的百度上的好友发来的邀请信不知道有多少了,几乎每天都有,不过这次是百度发来的邀请,大概是我最近在百度知道上比较活跃。不过我一直都没有使用,今天百度发来的邮件说已经为我激活登陆权限,并且可以创建一个群。这个好事不能错过,普通的发式要邀请好友达到一定的数量才能创建群的权限。

hi 收到百度Hi的邀请

下载安装之后感觉百度Hi的外观很像微软的Windows Live Messenger,但是显得比较粗糙,感觉没有WLM那么华丽。使用之后感觉毕竟是新的软件,功能比较少,目前还不能起到威胁QQ和WLM市场的作用。

im 收到百度Hi的邀请 

百度拥有相当数量的用户群,而且只有邀请好友才能有创建群的权限,这招很厉害,对于增加用户数量是个非常有效的方法。但是在QQ和WLM基本垄断市场的情况下,很多人虽然拥有了百度Hi的帐号,但是在线时间并不长,因为好友很少。绝大多数人都在使用QQ,而且QQ上好友多,如果要换用别的软件,比如WLM,就会牵涉到一个问题,没有好友,或者好友很少,这就是群聚效应了(我自己起的一个名字)。只有当大家都换IM软件,才有可能移植到另一个聊天平台,但是这个基本是不太可能的,人越多,希望也越渺茫。

不过我还是很看好百度Hi的,相信百度Hi超过新浪UC,网易泡泡,移动飞信只是个时间上的问题。

« Previous PageNext Page »