学习要点

  • Object类
  • 枚举
  • 包装类
  • Math类
  • Random类
  • 字符串处理
  • 日期时间

Object类

1  什么是Object类

  • Object类存储在java.lang包中,是所有java类(Object类除外)的终极父类。
  • 数组也继承了Object类。
  • 接口是不继承Object类的,Java语言规范Section 9.6.3.4——“Object类不作为接口的父类”。
  • Java是单继承的。如果一个类没有显式继承某个类,则默认继承Object类。

2  Object类常用方法

方法

说明

public Object()

Object类构造方法。为子类默认提供无参构造函数。

private static native void

registerNatives()

用native关键字修饰的函数表明该方法的实现不是在Java中去完成,而是由C/C++去完成,并被编译成了.dll,由Java去调用。将C/C++中的方法映射到Java中的native方法,实现方法命名的解耦。

protected native Object

clone() throws

CloneNotSupportedException

clone函数返回的是一个引用,指向的是新的clone出来的对象,此对象与原对象分别占用不同的堆空间。

public final native

Class<?> getClass()

getClass()也是一个native方法,返回的是此Object对象的类对象/运行时类对象Class<?>。效果与Object.class相同。

public Boolean

equals(Object obj)

equals用来判断对象的内容完全相同,此处的内容多指对象的特征/属性。==表示用来判断是否指向同一内存地址。

public native int

hashCode()

返回一个整形数值,表示该对象的哈希码值。一般重写equals方法的同时需要重写hashCode方法。相同哈希码值的对象,是两个相等的对象。

public String toString()

返回该对象的字符串表示。对象的反射信息。

protected void finalize()

Java垃圾回收机制方法。JVM准备对此对形象所占用的内存空间进行垃圾回收前,此方法将被调用。类似C++的析构函数。

wait()

notify()

notifyAll()

和多线程相关的方法。

对象克隆clone()方法使用示例代码:

package com.etc.base;

/*
* 对象克隆
* 1.自定义类实现Cloneable接口
* 2.自定义类实现自己的clone()方法
* 3.实现clone()方法时通过super.clone(),通过调用Object实现的clone()方法得到对象的副本,并返回该副本。
*/ /** 地址信息类 */
class Address {
String detail; public Address(String detail) {
this.detail = detail;
}
} /** 用户信息类:实现了克隆接口 */
class User implements Cloneable {
int age;
Address address; public User(int age) {
this.age = age;
address = new Address("北京东城");
} /** 重写克隆方法 */
public User clone() throws CloneNotSupportedException {
return (User) super.clone(); } } public class ObjectTest { public static void main(String[] args) throws CloneNotSupportedException {
User u1 = new User(30);
User u2 = u1.clone();//实现了浅克隆:User对象中的Address没有实现克隆(如果实现,则为深度克隆)
// 判断u1和u2是否相同
System.out.println(u1 == u2);//结果为false
// 判断u1和u2的address对象是否一致
System.out.println(u1.address == u2.address);//结果为true(未实现深度克隆) } }

  

枚举

1  语法

[Modifier] enum enumName{

    enumContantName1[,enumConstantName2...[;]]

    //[field,method]

}

枚举指由一组固定的常量组成的类型

2  使用枚举的好处

类型安全、易于输入、代码清晰

3  示例代码

/**性别枚举*/

public enum Gender {

   Male, Female

}

/**枚举测试类*/

public class Person {

   private Gender sex;

   public Gender getSex() {

       return sex;

   }

   public void setSex(Gender sex) {

       this.sex = sex;

   }

}

/**测试类*/

public class Test {

   public static void main(String[] args) {

       Person p = new Person();

       p.setSex("男");//类型安全

       p.setSex(Gender.Male);

   }

}

  

包装类

1  概念

包装类是将基本类型封装到一个类中。该类包含属性和方法,方便对象操作。

包装类位于java.lang包中。

2  包装类类图

3  基本数据类型转换为包装类

Integer intValue = new Integer(21);

或Integer intValue = new Integer("21");

Integer intValue = Integer.valueOf("21");

  

4  包装类转换成基本类型

Integer integerId=new Integer(25);

int intId=integerId.intValue();

  

5  基本类型和包装类的自动转换

Integer intObject = 5;

int intValue = intObject;

  

注意:包装类并不是用来取代基本类型的。

Math类

1  类说明

java.lang.Math类提供了常用的数学运算方法和两个静态常量E(自然对数的底数) 和PI(圆周率)

2  示例代码

Math.abs(-3.5); //返回3.5 

Math.max(2.5, 90.5);//返回90.5

int random = (int) (Math.random() * 10); //生成一个0-9之间的随机数

3  上机练习

需求说明

编码实现双色球功能。

分析

双色球规则红球33选6,蓝球16选1,不允许重复。

使用Math类的random()方法在1到33内随机产生6个红球号码,每产生一个判断是否已经在数组中存在 ,不存在则保存于数组,否则重选。

从1到16间随机产生一个蓝球号码。

效果示意图

Random类

1  Java生成随机数的几种方式

  • Math. random()方法产生随机数。
  • Random类产生随机数。
  • System.currentTimeMillis(),返回一个从1970年1月1号0点0分0秒到目前的一个毫秒数,通过毫秒数对一些数进行取模,获得相应随机数。Random类默认构造方法就是采用这种方式获得随机数。

2  Random类产生随机数

Random rand=new Random(); //创建一个Random对象

for(int i=0;i<20;i++){//随机生成20个随机整数,并显示

int num=rand.nextInt(10);//返回下一个伪随机数(0-10之间),整型的

   System.out.println("第"+(i+1)+"个随机数是:"+num);

}

  

注意:用同一个种子值来初始化两个Random 对象,然后用每个对象调用相同的方法,得到的随机数也是相同的。

Random random1 = new Random(100);

Random random2 = new Random(100);

ThreadLocalRandom类

用于并发环境下生成随机数,可以减少线程间的竞争,提高系统线程安全性。

示例代码:

// 获取ThreadLocalRandom实例
ThreadLocalRandom random = ThreadLocalRandom.current();
// 生成一个2-99之间的随机整数
int number1 = random.nextInt(2, 99);
// 生成一个2.0-99.0之间的随机浮点数。根据某个种子数值计算出来的伪随机数。
double number2 = random.nextDouble(2.0, 99.0);

  

字符串处理

1  String类

基本概念

String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。

字符串是常量:它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。

String对象存储字符串

String str1 = "Hello World";

String str2 = new String();//str1==str2?

String str3 = new String("Hello World");//str3==str1?

  

String类常用操作

1.字符串比较

equals()方法:检查组成字符串内容的字符是否完全一致。

“==”:判断两个字符串在内存中的首地址,即判断是否是同一个字符串对象。

2.字符串连接

“+”连接:

System.out.println("金立高级手机:"+888+"元/部");

concat()方法连接:

String s = new String("你好,");
String name = new String("詹姆斯·高斯林!");
String sentence = s.concat(name);
System.out.println(sentence);

  

3.字符串提取

方法名

说明

public int indexOf(int ch)

搜索第一个出现的字符ch(或字符串value),返回索引号

public int indexOf(String value)

public int lastIndexOf(int ch)

搜索最后一个出现的字符ch(或字符串value),返回索引号

public int lastIndexOf(String value)

public String substring(int index)

提取从位置索引开始的字符串部分

public String substring

(int beginindex, int endindex)

提取beginindex和endindex之间的字符串部分

public String trim()

返回一个前后不含任何空格的调用字符串的副本

注意:字符串首字符位置索引为0。

上机练习

需求描述:判断.java文件名是否正确,判断邮箱格式是否正确

分析:

l  合法的文件名应该以.java结尾

l  合法的邮箱名中至少要包含“@”和“.”, 并检查“@”是否在“.”之前。

字符串拆分

String类提供了split()方法,将一个字符串分割为子字符串,结果作为字符串数组返回。

同时,concat()方法支持把指定字符附加到字符串末尾。

上机练习

把每句话中间带空格的这段话“如果爱太荒凉  我陪你梦一场 赎回你所有泪光 这一路有多远 这三世有多长 执手到地老天荒”拆分成一句一行输出。

再把这句话按照如下格式输出:“如果爱太荒凉-我陪你梦一场-赎回你所有泪光-这一路有多远-这三世有多长-执手到地老天荒”

2  StringBuffer类

定义

带缓冲区的String类,支持动态调整字符串长度,是String的增强版。线程安全类。

语法格式

StringBuffer sb = new StringBuffer();

StringBuffer sb = new StringBuffer("cnetc");

  

 如何使用

sb.toString();        //转化为String类型

sb.append ("**");   //追加字符串,支持任何类型的值

  

示例代码

/* 将一个数字字符串转换成逗号分隔的数字串,

即从右边开始每三个数字用逗号分隔 */

        Scanner input = new Scanner(System.in);

        // 接收数字串,存放于StringBuffer类型的对象中

        System.out.print("请输入一串数字: ");

        String nums = input.next();

        StringBuffer str = new StringBuffer(nums);

        // 从后往前每隔三位添加逗号

        for (int i = str.length() - 3; i > 0; i = i - 3) {

            str.insert(i, ',');

        }

        System.out.print(str);

  

3  StringBuilder类

该类被设计用作 StringBuffer 的一个简易替换,非线程安全类,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

日期时间

1  Date类

类 Date 表示特定的瞬间,精确到毫秒。

时间戳:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

Date类的gettime()获得时间戳:

Date date = new Date();
long times=date.getTime();

  

SimpleDateFormat日期格式化:把时间戳转换成指定格式的日期输出

Date date = new Date();
long times = date.getTime();
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 定制日期格式
String now = formater.format(times); // 日期转换成日期字符串输出
System.out.println(now);

  

2  Timestamp

常用构造方法:Timestamp(long time)

使用毫秒时间值构造 Timestamp 对象。

Date date = new Date();
long times = date.getTime();
Timestamp tst=new Timestamp(times);
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 定制日期格式
String now = formater.format(tst); // 日期转换成日期字符串输出
System.out.println(now);

  

3  Calendar类

Calendar 类是一个抽象类,用于设置和获取日期/时间数据的特定部分。

示例代码:

Calendar t = Calendar.getInstance();
System.out.println("今天是" + t.get(Calendar.YEAR) + "年" + (t.get(Calendar.MONTH) + 1) + "月" + t.get(Calendar.DAY_OF_MONTH) + "日");
System.out.println("今天是星期" + (t.get(Calendar.DAY_OF_WEEK) - 1));

  

4  上机练习

需求

计算2017年5月6日是一年中的第几星期。

分析

使用set方法设置Calendar的日期。

使用Calendar类的get()方法获得WEEK_OF_YEAR字段。

JavaSE-18 常用工具类的更多相关文章

  1. Apache Commons 常用工具类整理

    其实一直都在使用常用工具类,只是从没去整理过,今天空了把一些常用的整理一下吧 怎么使用的一看就明白,另外还有注释,最后的使用pom引入的jar包 public class ApacheCommonsT ...

  2. PHP常用工具类

    <?php namespace isslib\Util; use think\Config; /** * 常用工具类 * User: xaxiong * Date: 2016/12/19 * T ...

  3. javascript常用工具类整理(copy)

    JavaScript常用工具类 类型 日期 数组 字符串 数字 网络请求 节点 存储 其他 1.类型 isString (o) { //是否字符串 return Object.prototype.to ...

  4. commons-lang3-3.2.jar中的常用工具类的使用

    这个包中的很多工具类可以简化我们的操作,在这里简单的研究其中的几个工具类的使用. 1.StringUtils工具类 可以判断是否是空串,是否为null,默认值设置等操作: /** * StringUt ...

  5. Maven基础&&Spring框架阶段常用工具类整理

    常用工具类 1.密码加密工具类: package com.itheima.utils; import java.security.MessageDigest; import sun.misc.BASE ...

  6. js常用工具类.

    一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...

  7. IOS开发--常用工具类收集整理(Objective-C)(持续更新)

    前言:整理和收集了IOS项目开发常用的工具类,最后也给出了源码下载链接. 这些可复用的工具,一定会给你实际项目开发工作锦上添花,会给你带来大大的工作效率. 重复造轮子的事情,除却自我多练习编码之外,就 ...

  8. Android 常用工具类之SPUtil,可以修改默认sp文件的路径

    参考: 1. 利用Java反射机制改变SharedPreferences存储路径    Singleton1900 2. Android快速开发系列 10个常用工具类 Hongyang import ...

  9. 封装一个简单好用的打印Log的工具类And快速开发系列 10个常用工具类

    快速开发系列 10个常用工具类 http://blog.csdn.net/lmj623565791/article/details/38965311 ------------------------- ...

  10. javaweb常用工具类及配置文件备份

    Javaweb常用工具类及配置文件备份   做一个代码备份,以后常用到的. hibernate工具类备份 package com.dly.service; /*  * hibernate获取sessi ...

随机推荐

  1. poj-1655 Balancing Act(树的重心+树形dp)

    题目链接: Balancing Act Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11845   Accepted: 4 ...

  2. nginx 静态网站配置

    /************************************************************************************** * nginx 静态网站 ...

  3. 【POJ 1947】 Rebuilding Roads

    [题目链接] 点击打开链接 [算法] f[i][j]表示以i为根的子树中,最少删多少条边可以组成j个节点的子树 树上背包,即可 [代码] #include <algorithm> #inc ...

  4. WebLogic之eclipse安装WebLogic插件

    转自:https://blog.csdn.net/magi1201/article/details/38323775

  5. win10下的jdk1.8安装

    1 下载jdk 下一步就好 默认C盘最好 不要又中文  http://pan.baidu.com/s/1eSwvFA6(这里面有两个jdk 32位 64位) 看图 CLASSPATH: .;%JAVA ...

  6. 解决 The word is not correctly spelled问题(转载)

    转自:http://jyao.iteye.com/blog/1261555 The word is not correctly spelled 此问题是eclipse校验单词拼写造成,如果出在配置文件 ...

  7. 只需3步,即可将你的Chromium Edge 浏览器设置成中文

    最近,Chromium Edge 浏览器推出了添加语言包的功能,于是我们可以轻松将其界面设置成中文的. 第1步: 升级浏览器到最新版 在Chromium Edge 浏览器的地址栏中输入: edge:/ ...

  8. [ZPG TEST 111] 奶牛的新家【DP】

    3.奶牛的新家 [问题描述] 由于奶牛们纷纷表示破旧的房子实在是太丑陋了,DD决定给他们建造新家.现在有许多奶牛决定将家建造在n*m的城市中.然而奶牛们分成了k帮派,不同帮派的奶牛不能住在同列或同行上 ...

  9. SSRS域账号下 User 'XXX' does not have required permissions的处理方法

    SSRS安装完成后,点击Report Manager URL,提示:User 'XXX' does not have required permissions. Verify that suffici ...

  10. 工作记录 angular页面操作 MD5加密

    今天只是做页面,基于angularjs,有美工做的图打底,确实好用 密码保存,用到了C# MD5加密: https://www.cnblogs.com/healer007/p/5062189.html