JDK中主要的包介绍
1. java.lang——包含一些Java语言的核心类, 如String、 Math、 Integer、 System和Thread, 提供常用功能
2. java.net——包含执行与网络相关的操作的类和接口。
3. java.io ——包含能提供多种输入/输出功能的类。
4. java.util——包含一些实用工具类, 如定义系统特性、 接口的集合框架类、 使用与日期日历相关的函数。
5. java.text——包含了一些java格式化相关的类
6. java.sql——包含了java进行JDBC数据库编程的相关类/接口
7. java.awt——包含了构成抽象窗口工具集(abstract window toolkits) 的多个类, 这些类被用来构建和管理应用程序的图形用户界面(GUI)
包装类Wrapper
针对八种基本数据类型定义相应的引用类型—包装类(封装类)
有了类的特点,就可以调用类中的方法, Java才是真正的面向对象
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
byte,short,int,long,float,double都是Number的子类
Character和Boolean都是Object的直接子类
Primitives:
- Have performance advantages
Wrappers:
- Allow us to not violate the “everything is an object” principle, which means that numbers, characters, and boolean values don’t violate this concept
- Expand the possibilities for working with these values by providing convenient methods and fields
- Are necessary when a method only works with objects
基本数据类型—->包装类的实例 —-装箱
通过包装类的构造器实现:
int i = 500;
Integer i1 = new Integer(i);
还可以通过字符串参数构造包装类对象: ```java Float f = new Float(“4.56”); Float f1 = new Float(4.56f); Float f2 = new Float(4.56); //2行和三行都行,有个重载方法在里面 //long = new Long(“asdf”); //NumberFormatException
Boolean b1 = new Boolean(true); //true Boolean b2 = new Boolean(“true”);//true //凡是忽略大小写不为true的字符串,全都是false,null传进去也是false //这块不清楚看下源码就行,很容易理解 Boolean b3 = new Boolean(“true123”); //false Boolean b4 = new Boolean(null); //false Boolean b5; //null
包装类对象--->基本类型变量 ---拆箱<br />调用包装类的.xxxValue()方法:
```java
boolean b = bObj.booleanValue();
JDK1.5之后,支持自动装箱,自动拆箱。但类型必须匹配
字符串—-> 基本类型/包装类
对应包装类的parseXxx(String)静态方法
从键盘获取输入
java.util.Scanner
/*
如何从键盘获取不同类型的输入
Scanner
*/
import java.util.Scanner;
public class ScannerTest{
public static void main(String args[]){
Scanner scan = new Scanner(System.in);
Student s1 = new Student(scan.next(), scan.next(), scan.nextInt(), scan.nextDouble());
s1.print();
}
}
class Student{
int age;
String sex;
String name;
double height;
Student(String name, String sex, int age, double height){
this.age = age;
this.sex = sex;
this.name = name;
this.height = height;
}
void print(){
System.out.println(name);
System.out.println(sex);
System.out.println(age);
System.out.println(height);
}
}
获取当前时间
java.lang.System
该类中有一个方法: currentTimeMillis()
Date
每个 Date 对象以一种非常有趣的形式存储时间:自格林威治标准时间 1970 年 1 月 1 日以来的毫秒数。
按照中国时区来看就是1970/01/01 8:00
每个对象在创建时都以当前时间进行初始化。要知道当前时间,只需创建一个 Date 对象。
获取当前日期:
public static void method1() {
// 初始化 Date 对象
Date date = new Date();
// 使用 toString() 函数显示日期时间
System.out.println(date.toString());
}
计算两个日期之间的差值
public static void main(String[] args) throws Exception
{
Date currentTime = new Date(); // 获取当前日期和时间
Thread.sleep(3000); // 等待 3 秒(3000 毫秒)
Date newTime = new Date(); // 获取新的当前时间
long msDelay = newTime.getTime() - currentTime.getTime(); // 计算差值
System.out.println("时间差值为:" + msDelay + ",以毫秒表示");
}
主要是Date类的
getTime()
方法的使用,返回该Date实例的毫秒值!
确定自当天开始经过了多少时间:
public static void main(String[] args) throws Exception
{
Date currentTime = new Date();
int hours = currentTime.getHours();
int mins = currentTime.getMinutes();
int secs = currentTime.getSeconds();
System.out.println("自午夜以来的时间 " + hours + ":" + mins + ":" + secs);
}
主要是
getHours()
getMinutes()
getSeconds()
这几个方法的使用
确定自年初开始经过了多少天:
public static void main(String[] args) throws Exception
{
Date yearStartTime = new Date();
yearStartTime.setHours(0);
yearStartTime.setMinutes(0);
yearStartTime.setSeconds(0);
yearStartTime.setDate(1); // 当月第一天
yearStartTime.setMonth(0); // 一月(从 0 到 11 对月份编制索引)
Date currentTime = new Date();
long msTimeDifference = currentTime.getTime() - yearStartTime.getTime();
long msDay = 24 * 60 * 60 * 1000; // 24 小时内的毫秒数
int dayCount = (int) (msTimeDifference/msDay); // 完整天数
System.out.println("自年初以来的天数:" + dayCount);
}
2021/3/15
总结
“getTime()
方法返回 Date 对象中存储的毫秒数。”
“after()
方法检查 调用该方法的日期 是否在 传递给该方法的日期 之后”。类似的还有 before()
equals()
“getHours()、getMinutes()、getSeconds()
方法分别为调用它们的对象返回小时数、分钟数和秒数。”
SimpleDateFormat
SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。
日期和时间的格式化编码
时间模式字符串用来指定时间格式。在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:
字母 | 描述 | 示例 |
---|---|---|
G | 纪元标记 | AD |
y | 四位年份 | 2001 |
M | 月份 | July or 07 |
d | 一个月的日期 | 10 |
h | A.M./P.M. (1~12)格式小时 | 12 |
H | 一天中的小时 (0~23) | 22 |
m | 分钟数 | 30 |
s | 秒数 | 55 |
S | 毫秒数 | 234 |
E | 星期几 | Tuesday |
D | 一年中的日子 | 360 |
F | 一个月中第几周的周几 | 2 (second Wed. in July) |
w | 一年中第几周 | 40 |
W | 一个月中第几周 | 1 |
a | A.M./P.M. 标记 | PM |
k | 一天中的小时(1~24) | 24 |
K | A.M./P.M. (0~11)格式小时 | 10 |
z | 时区 | Eastern Standard Time |
‘ | 文字定界符 | Delimiter |
“ | 单引号 | ` |
用法1:以特定形式将Date —> String
SimpleDateFormat aDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat bDate=new SimpleDateFormat("yyyy-MMM-dddddd");
long now=System.currentTimeMillis();
System.out.println(aDate.format(now));
System.out.println(bDate.format(now));
SimpleDateFormat myFmt=new SimpleDateFormat("yyyy年M月dd日 HH时mm分ss秒");
SimpleDateFormat myFmt1=new SimpleDateFormat("yy/MM/dd HH:mm");
SimpleDateFormat myFmt2=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
SimpleDateFormat myFmt3=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ", Locale.ENGLISH);
SimpleDateFormat myFmt4=new SimpleDateFormat("一年中的第 D 天 一年中第w个星期 一月中第W个星期 在一天中第k时 z时区");
System.out.println(myFmt.format(now));
System.out.println(myFmt1.format(now));
System.out.println(myFmt2.format(now));
System.out.println(myFmt3.format(now));
System.out.println(myFmt4.format(now));
M
MM
MMM
的不同前两个都是阿拉伯数字表示的月份,区别在于是一位还是两位,当然如果用M
而一位无法表示就会用两位表示,比如11MMM
是用当地语言表示的月份,比如我现在在中国,11月的表示方式就是十一月
,而如果在英语系国家,使用Nov
表示MMMM
如果是英语表示的话是全称:November
💎
E
EE
EEE
在英语表示中都是星期的缩写,EEEE
是全称 上述四种在中文表示中都是星期一
的意思
举个例子:展示M的不同数量的区别
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MMM-dd");
String input = "1818-十一月-11";
System.out.print(input + " Parses as ");
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
Calendar
参考文档
用Calendar取代Date,仅仅用Date的getTime()方法获取当前时间的毫秒值进行时间的记录
When working with the Calendar
class, it’s important to understand that this is just that, a calendar, not an individual date.
This is abundantly apparent if you try to display the Calendar
object:
Output: java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id=”Europe/London”,offset=0,dstSavings=0,useDaylight=false,transitions=79,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=1,ERA=?,YEAR=2017,MONTH=0,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=25,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=?,ZONE_OFFSET=?,DST_OFFSET=?]
_
Calendar —> Date
使用Calendar的getTime()函数返回Calendar实例对应的Date对象