Java 基础类库
与用户互动
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 基础类库的更多相关文章
- Java基础类库简介
Java基础类库简介 一.常用的基础类库:11个jar(Java Archive,Java归档)包 作为java语言使用者,我们可以感受到java语言带来的优势(平台无关.面向对象.多线程.高效易扩展 ...
- 菜鸡的Java笔记 java基础类库 BaseClassLibrary
java基础类库 BaseClassLibrary StringBuffer 类的特点 StringBuffer,StringBuilder,String 类之间的关系 ...
- 九. 常用类库、向量与哈希1.Java基础类库
Java 的类库是 Java 语言提供的已经实现的标准类的集合,是 Java 编程的 API(Application Program Interface),它可以帮助开发者方便.快捷地开发 Java ...
- GitHub 上100个最受欢迎的Java基础类库
作为一名整天与既成熟且不断发展的Java语言打交道的开发者,面对的困境之一就是在我们编写代码的时候,是使用一些人人谈论的人们新技术呢,还是坚持使用一些虽旧但成熟的类库? 由于Java应用中大部分是商业 ...
- 第七章 java基础类库
1. 日期时间: 用Calendar类. 2. 分隔符:空格.tab.回车. 3. Scanner:读取键盘输入.读取文件. 4. 系统类: System Runtime. 5. 所有的java类都 ...
- Java基础类库
1 main方法 运行java程序的参数: 下面详细讲解main 方法为什么采用这个方法签名 1.public 修饰符:Java类由jvm调用,为了让jvm可以自由调用这个main()方 ...
- 疯狂JAVA——第七章 java基础类库
System类代表当前java程序的运行平台,程序不能创建System类的对象,System类提供了一些类变量和类方法,允许直接通过System类来调用这些类变量和类方法.
- java 基础类库之 SQLFun
package com.exjor.webdemo; import java.sql.Timestamp; import java.util.Date; public class SQLFun { / ...
- java 基础类库之 FormatFun
package com.exjor.webdemo; import java.text.SimpleDateFormat; import java.util.Date; public class Fo ...
- 第七章--Java基础类库--与用户的互动
1.命令行编译和运行java程序在notepad++中集成java编译运行命令 参考博客:http://blog.sina.com.cn/s/blog_84405af50101q7fn.html2与用 ...
随机推荐
- Android系统Gps分析(一)【转】
本文转载自:http://blog.csdn.net/xnwyd/article/details/7198728 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 1 G ...
- Python多人聊天室
一.目的 以实现小项目的方式,来巩固之前学过的Python基本语法以及相关的知识. 二.相关技术: 1.wxpython GUI编程 2.网络编程 3.多线程编程 4.数据库编程 5.简单的将数据导出 ...
- iOS数据持久化存储之属性列表
属性列表(plist) iOS提供了一种plist格式的文件(属性列表)用于存储轻量级的数据,属性列表是一种XML格式的文件,拓展名为plist.如果对象是NSString.NSDictionary. ...
- TP框架控制器和对应方法创建
控制器和对应方法创建 控制器是MVC模式中的核心,TP默认有一个控制器: Index控制器里面有一个操作方法:Index 我们在访问http://localhost:8080/Thinkphp ...
- 机器视觉 Histogram of oriented gradients
Histogram of oriented gradients 简称 HoG, 是计算机视觉和图像处理领域一种非常重要的特征,被广泛地应用于物体检测,人脸检测,人脸表情检测等. HoG 最早是在200 ...
- python 之gc(回收机制)--garbage collection(GC垃圾回收)
######################引用计数######################### 引用计数:python 当中一种用来解决垃圾回收的策略之一 char 1个字节(2**8) in ...
- 用CSS实现新闻轮播效果
CSS: /* Make it a marquee */ .marquee { width: 450px;margin: 0 auto;overflow: hidden;white-space: no ...
- 11g dataguard 类型、保护模式、服务
一. Dataguard中的备库分为物理备库和逻辑备库及快照备库 备库是主库的一致性拷贝,使用一个主库的备份可以创建多到30个备库,将其加入到dataguard环境中,创建成功后,dataguard通 ...
- P1417烹调方案——背包问题中的排序
题目:https://www.luogu.org/problemnew/show/P1417 与普通的01背包不同的一点是加入物品的顺序对结果有影响,这里可以考虑贪心的想法,把对全局影响最小的物品排在 ...
- 记一次keepalived脑裂问题查找
在自己环境做keepalived+Redis实验时,当重启了备用redies机器后,发现两台redies主机都拿到了VIP [root@redis2 ~]# ip addr list 1: lo: & ...