与用户互动

1. 运行java程序的参数

  public static void main(Stirng[] args)

  这个方法是有JVM调用,因此用public static修饰,并且没有返回值,同时形参args由JVM负责赋值。

  如果传进去的参数是多个,用空格隔开,用Java命令行运行程序,如下:

  java javaclasssName  arg1 arg2 ...

  如果参数本身含有空格,该参数用双引号“”括起来,否则JVM会把该空格当成参数分隔符

  Java javaclassName "arg1 arg1.1"  arg2 ...

2. 使用Scanner获取键盘输入

  Scanner是一个基于正则表达式的文本扫描器,它可以从文本、输入流、字符串中解析出基本类型值和字符串值。Scanner提供了多个构造器,不同的构造器可以接受文本、输入流、字符串作为数据源,用于从中解析数据。

  主要提供了两个方法来扫描输入:

  hasNextXxx: 是否还有下一个输入项,其中Xxx可以是Int,Long等代表基本类型的字符串。如果只是判断是否包含下一个字符串,则直接使用hasNext()

  nextXxx: 获取下一个输入项,Xxx与上面相同。

  在默认情况下,Scanner使用空白(包括空格、Tab空白、回车)作为多个输入项之间的分隔符。

public static void main(String[] args) {
// System.in 代表标准输入,就是键盘输入
Scanner sc = new Scanner(System.in);
// 只把回车作为换行符
sc.useDelimiter("\n");
// 判断是否还有下一个输入项
while (sc.hasNext()) {
// 输出输入项
System.out.println("The input value is: " + sc.next());
}
}

  还有另外两个简单方法来逐行读取:

  boolean hasNextLine():  返回输入源中是否还有下一行。

  String nextLine(): 返回输入源中下一行的字符串。

系统相关

1. System类

  System类代表当前java程序的运行平台,程序不能创建System类的对象,System类提供了一些类变量和类方法,允许直接调用。

  System类提供了代表标准输入、标准输出和错误输出的类变量,并提供了一些静态方法用于访问环境变量、系统属性的方法,还提供了加载文件和动态链接库的方法。

public static void main(String[] args) throws Exception, IOException {
Map<String, String> env = System.getenv();
for (String name : env.keySet()) {
System.out.println(name + "--->" + env.get(name));
}
// 获取指定环境变量的值
System.out.println(System.getenv("JAVA_HOME"));
// 获取所有的系统属性
Properties props = System.getProperties();
// 将所有的系统属性保存到文件中
props.store(new FileOutputStream("props.txt"), "System Properties");
// 输出特定的系统属性
System.out.println(System.getProperty("os.name"));
}

 2. Runtime类

  Runtime类代表Java程序的运行时环境,每个Java程序都有一个与之对应的Runtime实例,应用程序通过该对象与其运行时环境相连。0

public static void main(String[] args) throws Exception{
// 获取Java程序关联的运行时环境
Runtime rt = Runtime.getRuntime(); System.out.println("处理器数量:" + rt.availableProcessors());
System.out.println("空闲内存数:" + rt.freeMemory());
System.out.println("总内存数:" + rt.totalMemory());
System.out.println("最大内存数:" + rt.maxMemory()); // 直接单独起一个进程来运行操作系统的命令
rt.exec("notepad.exe");
}

常用类

1. Object类

  它是所有类、数组、枚举类的父类。Java允许把任何类型的对象赋给Object类型的变量。

  当定义一个类时,没有使用extends关键字为它显示指定父类,则该类默认继承Object类。

2. Objects类

  它是工具类。

  Java为工具类的命名习惯是添加一个字母s。

3. String、StringBuffer和StringBuilder类

  String是不可变类,一旦String对象被创建,这个对象包含的字符串序列就不可改变,直到该对象被销毁。

  StringBuffer对象则代表一个字符序列可变的字符串,可通过一系列方法改变字符串,如append(), insert(), remove(), 最后在通过toString()方法将其转换为String对象。

  从JDK1.5新增 StringBuilder类。它和StringBuffer基本相似。不同的是,StringBuffer是线程安全的;StringBuilder没有实现线程安全功能,所以性能略高。(因此需要创建一个内容可变的字符串对象,优先考虑StringBuilder)

  以上三者,都实现了CharSequence接口,因此CharSequence可以认为是字符串协议接口。

public static void main(String[] args) {
String s = new String("abcdefghijk");
// 字符串的序列从0开始到length()-1
System.out.println(s.charAt(5)); // f String s1 = new String("abcdefghijk");
String s2 = new String("abcdefghijklmn");
String s3 = new String("abcdefghijkabcde");
// 比较两个字符串的大小。
// 如果两个字符串的字符序列相等,则返回0;不相等时,从两个字符串第0个字符开始比较,返回第一个不相等的字符差
// 另一个情况,较长的字符串的前面部分恰巧是较短的字符串,则返回它们的长度差。
System.out.println(s.compareTo(s1)); //
System.out.println(s2.compareTo(s3)); // 返回'l'-'a'的差
System.out.println(s1.compareTo(s2)); // 返回长度差 StringBuilder sb = new StringBuilder();
sb.append("java"); // java
sb.insert(0, "Hello "); //Hello java
sb.replace(5, 6, ","); //Hello,java
sb.delete(5, 6); //Hellojava
// 反转
sb.reverse(); //avajolleH
System.out.println(sb.toString()); System.out.println(sb.length()); //
System.out.println(sb.capacity()); //16 // 只保留指定长度
sb.setLength(6);
System.out.println(sb.toString()); // avajol
}

4. Math类

  是一个工具类。构造器被定义成private的,因此不能创建Math类的对象。Math类中的所有方法都是类方法。还有类变量:PI和E。

5. Random 与 Java7的ThreaLocalRandom

  Random专门用来生成伪随机数。它有两个构造器:一个构造器使用默认的种子(以当前时间为种子);另一构造器需要显示传入一个long型整数的种子。

public static void main(String[] args) {
Random rand = new Random(System.currentTimeMillis()); System.out.println(rand.nextBoolean()); byte[] buffer = new byte[16];
rand.nextBytes(buffer);
System.out.println(Arrays.toString(buffer)); // 生成0.0~1.0之间的随机double数
System.out.println(rand.nextDouble());
// 生成0.0~1.0之间的随机float数
System.out.println(rand.nextFloat());
// 生成int范围内的随机数
System.out.println(rand.nextInt());
// 生成0~20范围内的随机数
System.out.println(rand.nextInt(20));
}

  ThreadLocalRandom是Java7新增的类,是Random的增强版。在并发环境下,可以减少多线程资源竞争,最终保证系统具有更好的线程安全性。它提供了一个静态的current() 方法来获取ThreadLocalRandom对象。

  ThreadLocalRandom random = ThreadLocalRandom.current();

  测试发现:

  当两个Random对象的种子相同,而且方法的调用顺序也相同,它们就会产生相同的数字序列。所以说是是伪随机数。

  为了避免上面这种情况,通常使用当前时间作为Random对象的种子。

  Random rand = new Random(System.currentTimeMillis())

6. BigDecimal类

  解决float和double浮点数,容易引起精度丢失的问题。它能精确表示、计算浮点数。

  它有很多构造器,但是,推荐使用基于String的构造器,因为该构造器的结果是可预知的。

  如果程序需要对double浮点数进行加减乘除基本运算,则需要先将double类型数字包装成BigDecimal对象,调用BigDecimal对象的方法执行运算后再将结果转换成double型变量。

public class BigDecimalUtils {

    // 默认除法运算精度
private static final int DEF_DIV_SCALE = 10; // 私有构造器,不能实例化
private BigDecimalUtils() { } // 加
public static double add(double d1, double d2) {
BigDecimal b1 = BigDecimal.valueOf(d1);
BigDecimal b2 = BigDecimal.valueOf(d2);
return b1.add(b2).doubleValue();
} // 减
public static double sub(double d1, double d2) {
BigDecimal b1 = BigDecimal.valueOf(d1);
BigDecimal b2 = BigDecimal.valueOf(d2);
return b1.subtract(b2).doubleValue();
} // 乘
public static double mul(double d1, double d2) {
BigDecimal b1 = BigDecimal.valueOf(d1);
BigDecimal b2 = BigDecimal.valueOf(d2);
return b1.multiply(b2).doubleValue();
} // 除
// 当发生除不尽的时候,精确到小数点以后10位的数字四舍五入
public static double div(double d1, double d2) {
BigDecimal b1 = BigDecimal.valueOf(d1);
BigDecimal b2 = BigDecimal.valueOf(d2);
return b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP)
.doubleValue();
} public static void main(String[] args) {
System.out.println(add(0.05, 0.01));
System.out.println(mul(0.005, 0.123));
System.out.println(div(10, 3));
} }

日期、时间类

 1. Date类

  从JDK1.0就存在,它的大部分构造器和方法都已经过时了,所以不再推荐使用了。

2. Calendar类

  它是一个抽象类(不能使用构造器来创建对象,根据几个静态getInstance()方法来获取Calender对象),它用于表示日历。

  Calendar和Date都是表示日期的工具类,因此可以直接进行转换。

public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
System.out.println(date.getTime()); Calendar calendar = Calendar.getInstance();
Date date1 = calendar.getTime(); Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(date1);
}

  

  使用DateFormat格式化日期、时间

  DateFormat是一个抽象类,它提供了几个类方法用于获取DateFormat对象。

  它的parse()方法可以把一个字符串解析成Date对象,但它要求被解析的字符串必须符合日期字符串的要求。

  使用SimpleDateFormat格式化日期

  它是DateFormat的子类。可以灵活地格式化Date,也可以用于解析各种格式的日期字符串。

  创建SimpleDateFormat对象时需要传入一个pattern字符串,它不是正则,而是一个日期模板字符串。

  例如:

  String dateString = "2011-11-11";  

  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

  Date date = sdf.parse(dateString);   // String --> Date

  String dateStr = sdf.format(date);   // Date --> String

正则表达式

  是一个强大的字符串处理工具。可以对字符串进行查找、提取、分割、替换等操作。

  在程序中:

  Pattern对象是正则表达式编译后在内存中的表示形式,因此,正则表达式必须先编译成Pattern对象,然后再利用Pattern对象创建对应的Matcher对象。

  执行匹配所涉及的状态保留在Matcher对象中,多个Matcher对象可共享同一个Pattern对象。

  Pattern是不可变类,可供多个并发线程安全使用。 Matcher类提供了几个常用方法。具体方法可以查阅API。

public static void main(String[] args) {
Pattern pattern = Pattern.compile("a*b");
Matcher matcher = pattern.matcher("aaaaaaab");
boolean b = matcher.matches();
System.out.println(b);// true
}

国际化和格式化

1. 国际化的思路

  通过在资源文件中设置key-value的形式。资源文件的命名可以有以下三种形式:

  baseName_language_country.properties

  baseName_language.properties

  baseName.properties

  其中baseName是资源文件的基本名,用户可随意而定;而language和country都不可以随意变化,必须是java所支持的语言和国家。

2. Java支持的国家和语言

  通过如下形式可以得到:

public static void main(String[] args) {
// 返回java所支持的全部国家和语言的数组
Locale[] localeList = Locale.getAvailableLocales(); for (int i = 0; i < localeList.length; i++) {
System.out.println(localeList[i].getDisplayCountry() + "="
+ localeList[i].getCountry() + " "
+ localeList[i].getDisplayLanguage() + "="
+ localeList[i].getLanguage());
}
}

3. 完成国际化

  

Java 基础类库的更多相关文章

  1. Java基础类库简介

    Java基础类库简介 一.常用的基础类库:11个jar(Java Archive,Java归档)包 作为java语言使用者,我们可以感受到java语言带来的优势(平台无关.面向对象.多线程.高效易扩展 ...

  2. 菜鸡的Java笔记 java基础类库 BaseClassLibrary

    java基础类库 BaseClassLibrary        StringBuffer 类的特点        StringBuffer,StringBuilder,String 类之间的关系   ...

  3. 九. 常用类库、向量与哈希1.Java基础类库

    Java 的类库是 Java 语言提供的已经实现的标准类的集合,是 Java 编程的 API(Application Program Interface),它可以帮助开发者方便.快捷地开发 Java ...

  4. GitHub 上100个最受欢迎的Java基础类库

    作为一名整天与既成熟且不断发展的Java语言打交道的开发者,面对的困境之一就是在我们编写代码的时候,是使用一些人人谈论的人们新技术呢,还是坚持使用一些虽旧但成熟的类库? 由于Java应用中大部分是商业 ...

  5. 第七章 java基础类库

    1. 日期时间: 用Calendar类. 2. 分隔符:空格.tab.回车. 3. Scanner:读取键盘输入.读取文件. 4. 系统类: System  Runtime. 5. 所有的java类都 ...

  6. Java基础类库

    1 main方法      运行java程序的参数:   下面详细讲解main 方法为什么采用这个方法签名 1.public 修饰符:Java类由jvm调用,为了让jvm可以自由调用这个main()方 ...

  7. 疯狂JAVA——第七章 java基础类库

    System类代表当前java程序的运行平台,程序不能创建System类的对象,System类提供了一些类变量和类方法,允许直接通过System类来调用这些类变量和类方法.

  8. java 基础类库之 SQLFun

    package com.exjor.webdemo; import java.sql.Timestamp; import java.util.Date; public class SQLFun { / ...

  9. java 基础类库之 FormatFun

    package com.exjor.webdemo; import java.text.SimpleDateFormat; import java.util.Date; public class Fo ...

  10. 第七章--Java基础类库--与用户的互动

    1.命令行编译和运行java程序在notepad++中集成java编译运行命令 参考博客:http://blog.sina.com.cn/s/blog_84405af50101q7fn.html2与用 ...

随机推荐

  1. Android系统Gps分析(一)【转】

    本文转载自:http://blog.csdn.net/xnwyd/article/details/7198728 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   1 G ...

  2. Python多人聊天室

    一.目的 以实现小项目的方式,来巩固之前学过的Python基本语法以及相关的知识. 二.相关技术: 1.wxpython GUI编程 2.网络编程 3.多线程编程 4.数据库编程 5.简单的将数据导出 ...

  3. iOS数据持久化存储之属性列表

    属性列表(plist) iOS提供了一种plist格式的文件(属性列表)用于存储轻量级的数据,属性列表是一种XML格式的文件,拓展名为plist.如果对象是NSString.NSDictionary. ...

  4. TP框架控制器和对应方法创建

    控制器和对应方法创建 控制器是MVC模式中的核心,TP默认有一个控制器:   Index控制器里面有一个操作方法:Index   我们在访问http://localhost:8080/Thinkphp ...

  5. 机器视觉 Histogram of oriented gradients

    Histogram of oriented gradients 简称 HoG, 是计算机视觉和图像处理领域一种非常重要的特征,被广泛地应用于物体检测,人脸检测,人脸表情检测等. HoG 最早是在200 ...

  6. python 之gc(回收机制)--garbage collection(GC垃圾回收)

    ######################引用计数######################### 引用计数:python 当中一种用来解决垃圾回收的策略之一 char 1个字节(2**8) in ...

  7. 用CSS实现新闻轮播效果

    CSS: /* Make it a marquee */ .marquee { width: 450px;margin: 0 auto;overflow: hidden;white-space: no ...

  8. 11g dataguard 类型、保护模式、服务

    一. Dataguard中的备库分为物理备库和逻辑备库及快照备库 备库是主库的一致性拷贝,使用一个主库的备份可以创建多到30个备库,将其加入到dataguard环境中,创建成功后,dataguard通 ...

  9. P1417烹调方案——背包问题中的排序

    题目:https://www.luogu.org/problemnew/show/P1417 与普通的01背包不同的一点是加入物品的顺序对结果有影响,这里可以考虑贪心的想法,把对全局影响最小的物品排在 ...

  10. 记一次keepalived脑裂问题查找

    在自己环境做keepalived+Redis实验时,当重启了备用redies机器后,发现两台redies主机都拿到了VIP [root@redis2 ~]# ip addr list 1: lo: & ...