2004年十一月月 发布的文章

Java 5.0新特性研究(二)

今天在“Java技术论坛”上看到了“J2se5.0新增小功能”这个帖子,大家的集思广益让我又有了一些收获。

1、再谈java引入的格式化输入和输出
在“Java 5.0新特性研究(一)”中,当时只是看了一些简单的例子,自己也没有深入看看jdk5.0的doc。今天看到论坛上的一些例子还是把我吸引了,自己又翻了翻昨天刚下的jdk5.0的doc,觉得java引入的新的格式化输入输出还是蛮好的^_^。

Java的格式化输入输出功能都是由java.util.Formatter类提供的。

Java提供printf:
//format output:
String str = String.format("my name is %s" , "tony bai");
System.out.println(str);//my name is tony bai.
System.out.printf("[%s] is %d years old", "dreamhead", 26);//输出一行无换行。
System.out.printf("[%s] is %d years old", "tony bai", 22).println();//输出一行有换行。

熟悉C/C++语法的对printf的使用应该不陌生,java中printf的使用几乎和C/C++没什么区别。

Java提供scanner,相当于scanf:

System.out.println(“Please enter your job id:”);
Scanner sc = new Scanner(System.in);
int id = sc.nextInt();
System.out.println(“Please enter your job name:”);
String jbName = sc.next();

运行后,首先让你输入job id,这是个int值,如果你输入字符,将会看到如下异常被throwed:
Exception in thread "main" java.util.InputMismatchException
        at java.util.Scanner.throwFor(Scanner.java:819)
        at java.util.Scanner.next(Scanner.java:1431)
        at java.util.Scanner.nextInt(Scanner.java:2040)
        at java.util.Scanner.nextInt(Scanner.java:2000)
        at Main.main(Main.java:59)

在C/C++中没有这种类型检查,我们举个简单的例子:
//test.c , written in standard c
#include "stdio.h"

int main(int argc, char *argv[])
{
    int job_id = 0;
    printf("enter your job id:\n");
    scanf("%d" , &job_id);
    printf("your job id is %d:\n" , job_id);
    return 0;
}

//test.cpp written in standard c++
#include "iostream"
#include "string"
using namespace std;

int main(int argc, char *argv[])
{
    int job_id = 0;
    cout << "enter your job id:" << endl;
    cin >> job_id;
    cout << "your job id is " << job_id << endl;    
    return 0;
}

上面两段程序完成统一功能。即接受你输入的job id,然后输出你的job id。
运行上面两个程序,我们输入”years”作为我们的job id,程序输出的结果是:

“your job id is 0”;

说明程序没有接受我们的输入而直接输出初始值了。这种情况可不是我们所要的,所以说java做得还是不错的,抛出了异常,以免输入错误的类型值。

2、UUID
使用过com组件的人都对uuid(Universally Unique IDentifier)不陌生,每个com组件都有自己全球唯一的uuid,在microsoft的visual studio中提供一个小工具可以生成一个uuid。Java在5.0中也引入了uuid,而且使用起来也很简单。

UUID uuid = UUID.randomUUID(); //use a static factory method to create an instance
System.out.printf("UUID : %s", uuid).println();
//output:UUID : a4bf4134-1395-4b13-a536-c1f538f95ff8

Everything is an object

读过《Thinking in Java》中著名的一章“Everything is an object”,而且不止一遍,不过经过今天和Dreamhead的探讨,才发现我对Java中的“Everything is an object”的理解还是那么的不到位。

我和Dreamhead谈到我在研究Java 5.0时遇到的问题:

String[] s = {“Hello” ,
              “Tiger”,
              “!”};

现在我想用传统的for loop来打印出字符串数组内的每一个字符串,我的问题是我该如何获取这个数组内的元素个数。我便查询一下jdk的doc,发现String类有一个length()方法,我就在s上使用了,结果编译器提示“can not find the method”,我就很奇怪了,为什么查到了String类下有概method,而compiler却提示找不到呢?后来我也使用了s.length,编译也通过了,执行也正确了。但是我心中的疑惑一直没有解开。今天和Dreamhead讨论下一步项目的工作计划时提到了这个问题,Dreamhead首先就说出了“Everything is an object”,String s是一个object ,同样String[] s也是一个object,也就是说我应该将String[] 放在一起看作一个类型,而不仅仅认为这是个String 类型的静态数组。这样length作为String[]类型的一个field就顺理成章了,我也就茅塞顿开了。也许上面的问题对于java老手来说很easy或者说根本不屑一提,但是对于我这个由C++过渡到java的选手来言,理解这个是很重要的。

最后还是牢记“Everything is an object in java”。是不是我的题目有些大呀^_^。

“我们不仅仅是小小程序员,我们还是普通人。”—– Darwin_yuan

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats