与运行环境交互(上)

与运行环境交互(上)

提纲

  • Java程序的参数
  • 获取键盘的输入
  • System类与Runtime类
  • 使用字符串
  • Math、Random、BigDecimal、Date等工具类的用法
  • 正则表达式
  • 国际化支持

Java程序的参数

  • 如果运行Java程序时在类名后紧跟一个或多个字符串(多个字符串之间以空格隔开),JVM就会把这些字符串依次赋给args元素。
  • 如果某参数本身也包含了空格,则应该将该参数用双引号 “ 括起来,否则JVM会把这个空格当成参数分隔符,而不是当成参数本身

使用Scaaner获取键盘的输入

  • 使用Scanner类可以很方便的获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器,它可以从文件、输入流、字符串中解析出基本类型值和字符串值。Scanner类提供了多个构造器,不同的构造器可接收文件、输入流、字符串等作为数据源,用于从文件、输入流、字符串中解析数据

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

    —hasNextXxx():是否还有下一个输入项,其中Xxx可以是Int、Long等代表基本数据类型的字符串。如果需要判断是否包含下一个字符串,则可以省略Xxx

    —nextXxx():获取下一个输入项。Xxx的含义与前一个方法中Xxx相同

使用BufferedReader读取键盘

  • BufferedReader是Java IO流中的一个字符、包装流,它必须建立在另一个字符流的基础之上。但标准收入:System.in是字节流,程序需要使用转换流InputStreamReader将其包装字符流
  • 使用BufferedReader可以逐行读取用户的键盘输入,每次用户的键盘输入都被BufferedReader当成String对象,与Scaaner不同的是,BufferedReader不能读取基本类型输入项,它总是读取String对象

System类

  • System类代表当前Java程序的运行平台,程序不能创建System类的对象,所以它提供了一些属性和类方法,允许直接通过System类名来调用这些属性和方法
  • System类提供了代表标准的输入、标准的输出和错误输出的类属性;并提供了一些静态方法用于访问环境变量、系统属性的方法;还提供了加载文件和动态链接库的方法。下面程序通过System类来访问操作的环境变量和系统属性

Runtime类与ProcessHandle

  • Runtime类代表Java程序的运行时的环境,每个程序员都有一个与之对应的Runtime实例,应用程序通过该对象与其运行时的环境相连。
  • 应用程序不能创建自己的Runtiem实例,但是可以通过getRuntime()方法获取与之相关两的Runtime对象
  • Runtime类代表Java程序的运行时的环境,可以访问JVM的相关信息,如处理器数量,内存信息等。
  • 除此之外,Runtime还有一个功能:它可以直接单独启动一条进程来运行操作系统的命令。运行后得到一个Process对象
  • Java9 新增了ProcessHandle的接口,通过该接口可以获取进程的ID、父进程和后代进程;通过该接口的onEit()方法可以在进程结束时完成某些行为

Object类

  • Object类是所有类、数组、枚举类的父亲,也就是说,Java允许把所有任何类型的对象赋给Object类型的变量。当定义一个类时没有使用extends关键字为它显式指定父类,则该类默认继承Object父类

对象的克隆

  • Object还提供了一个protected修饰的clone()方法,程序员可重写该方法来实现“浅克隆”
  • 自定义类实现“浅克隆”的步骤:
  • 自定义类实现Cloneable接口
  • 自定义类实现clone()方法
  • 在clone()方法中通过super.clone()调用Object的clone()方法来实现“浅克隆”

Java 7新增的Objects类

  • Objects提供了一些工具方法来操纵对象
  • 比如:
  • —hashCode():返回指定对象的hashCode值
  • —toString:返回指定对象的“描述性”字符串
  • —requiredNonNull:检查对象是否是null

String、StringBuffer和StringBuilder

  • 字符串就是一连串的字符串序列,Java提供了String和StringBuffer两个类来封装对字符串,并提供了系列方法来操作字符串对象
  • String类是不可变类的
  • StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append、insert,reverse、setCharAt、setLength等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString方法将其转换为一个String对象
  • JDK 1.5又新增了一个StringBuilder类,它也代表了字符串对象。StringBuilder是线程不安全的

无数不在的字符串

  • 使用String对象存储字符串

  • String s=“有志者事竟成”;

  • String s=new String(“有志者事竟成”);

  • String类位于java.lang包中,具有丰富的方法

    —计算字符串的长度

    —连接字符串

    —比较字符串

    —提取字符串

字符串比较

  • equals()方法原理

    :Object里边的equals方法是 比较两个对象的内存地址 是否是一致的,如果一致,即意味着这两个对象在内存中其实是一个对象,则返回true,否则返回false;

  • 输入的“java"和”java"代表同一课程,如何解决?

  • 使用equalsIgoreCase()方法

  • 结合toUpperCase()或toLowerCase()

字符串比较

使用equalsIgnoreCase()方法解决

if(favCourse1.equalslgnoreCase(favCourse2))
{
    System.out.println("最喜欢的课程相同");
}else{
    System.out.println("最喜欢的课程不相同");
}

结合toUpperCase()方法

if(favCourse1.toUpperCase().equals(favCourse2.toUpperCase))
{
    System.out.println("最喜欢的课程相同");
}else{
    System.out.printlb("最喜欢的课程不同");
}

字符串连接2-2

  • 方法1:使用“+”
  • 方法:使用String类的concat()方法
String s=new String("你好,");
String name=new String("张三!");
String sentence=s.concat(name);
//A.concat(B):   B字符串将被连接到A字符串后面
System.out.println(sentence);

字符串提取方法

  • 常用的提取方法举例

  • public int indexOf(int ch)

  • public int indexOf(String value)
    说明:搜索第一个出现的字符串ch(或者字符串value)

  • public int lastIndexOf(int ch)

  • public intlastIndexOf(String value)

    说明:搜索最后一个出现的字符ch(或字符串value)

方法说明
public String substring(int index)提取从位置索引开始的字符串部分
public String substring(int beginindex,int endindex)提取beginindex和endindex之间的字符串部分
public String trim()放回一个前后不含任何空格的调用字符串的副本
  • beginindex:字符串的位置从0开始算;
  • endindex:字符串的位置从1开始算;

StringBuffer

  • StringBuffer:String增强版
  • StringBuffer声明
stringBuffer sb=new StringBuffer();
StringBuffer sb-new StringBuffer("aaa");
  • StringBuffer的使用
sb.toString(); //转化为String类型
sb.append("*");//追加字符串

StringBuffer的用武之地

  • 从控制台接受课程信息,不断累加知道输入‘#’键结束,并输出全部课程信息
//声明课程信息字符串
StringBuffer course=new StringBuffer();
System.out.println("请输入课程信息");
Scanner sc=new Scanner(System.in);

//循环从键盘接受字符串
String input;
while(!(input=sc.next()).equals("#"))
{
    course.append(input);
    course.append("\n");
}
System.out.println("课程信息是:"+course)

未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值