与用户互动

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. SQL Server 2008R2 代理服务-开启

    ,点击开始菜单-所有程序-SQLServer2008R2-配置工具-SQLServer配置管理器 2,选择SQLServer服务 3,找到SqlServer代理(MSSQLSERVER),双击或右键选 ...

  2. 分享知识-快乐自己:Linux—jdk 安装步骤

    1.查看现有版本:java -version 2.查看jdk的具体版本: rpm -qa| grep jdk || rpm -qa| grep gcj 3.删除已安装jdk包: rpm -e --no ...

  3. [原创]java导出excel

    一.需求背景 在项目开发中,经常会遇到导出Excel报表文件的情况,因为很多情况下,我们需要打印Excel报表,虽然在网页上也可以生成报表,但是打印网上里的报表是无法处理排版问题的,所以最好的方式,还 ...

  4. 剑指OFFER18 判断一个二叉树的子树

    public class a18_IsSubTree { public static boolean hasSubTree(TreeNode treeRoot1, TreeNode treeRoot2 ...

  5. HihoCoder1642 : 三角形面积和([Offer收割]编程练习赛37)(求面积)(扫描线||暴力)(占位)

    描述 如下图所示,在X轴上方一共有N个等腰直角三角形.这些三角形的斜边与X轴重合,斜边的对顶点坐标是(Xi, Yi). (11,5) (4,4) /\ /\(7,3) \ / \/\/ \ / /\/ ...

  6. poj1417 True Liars[并查集+背包]

    有一点小转化的题,在设计dp状态时还是有点费脑筋的. 地址. 依题意,首先可以知道肯定要扩展域的并查集(明摆着的嘛).一个"好人"域,一个"坏人"域,每句话分两 ...

  7. bzoj 2251: 外星联络 后缀Trie

    题目大意 http://www.lydsy.com/JudgeOnline/problem.php?id=2251 题解 本来以为这道题应该从01序列的性质入手 结果就想歪了 等自己跳出了01序列这个 ...

  8. Codeforces 756C Nikita and stack

    Codeforces 756C Nikita and stack 题目大意: 给定一个对栈进行操作的操作序列,初始时序列上没有任何操作,每一次将一个本来没有操作的位置变为某一操作(push(x),po ...

  9. 系列文章-- SSIS学习

    SSIS是SQL Server Integraion Services的简称.是生成高性能数据集成解决方案(包括数据仓库的提取.转换和加载 (ETL) 包)的平台.   SSIS组件转换_模糊查找转换 ...

  10. Wmware Player中Linux挂载U盘

    菜单(Player)中有一项是可移动设备,中选择U盘,然后选择连接(断开主机), 然后在命令行中敲入 fdisk -l 正常情况下是sda是硬盘的信息,然后将会看到一个单蹦的sdb4的信息(sdb4可 ...