学常用类就是学API,学API就是学查字典,多敲代码才是正道。
String类
在Java中,字符串被作为String的对象处理。String类位于java.lang包中,该包会被自动导入所有的程序。String对象创建后不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。如果需要一个可改变的字符串,我们可以使用StringBuffer或者StringBuilder。
String类提供了许多用来处理字符串的方法,例如,获取字符串的长度.length()方法,对字符串进行截取.substring(int beginIndex,int endIndex)方法,将字符串转换为大写或小写.toUpperCase()方法和.toLowerCase()方法,字符串分割.split(Stirng regex, int limit)方法等。注意索引从0开始,使用.indexOf(…)进行字符或字符串查找时,如果匹配返回位置索引;如果没有匹配结果,返回-1。使用.substring(beginIndex,endIndex)进行字符串截取时,包括beginIndex位置的字符,不包括endIndex位置的字符,取头不取尾。
当频繁操作字符串时,会产生很多临时变量,我们可以使用StringBuilder类或StringBuffer类存储字符串来避免这个问题。StringBuilder类和StringBuffer类基本相似,StringBuffer是线程安全(线程同步)的,而StringBuilder是非线程安全(非线程同步)的,所以性能略高。因此一般情况下,如果需要创建一个内容可变的字符串对象,应优先考虑使用StringBuilder类。
StringBuilder类的常用方法:.append(参数)追加内容到StringBuilder对象的末尾,.insert(位置,参数)将内容插入到StringBuilder对象的指定位置,.toString()将StringBuilder对象转换为String对象,.length()获取字符串长度。
包装类
将基本的数据类型以及一些辅助方法包装到类中,把基本数据类型转换为对象。这些包装类分为两类,一类是对象性包装类,不继承任何其他类(Object的直接子类),另一种是数值型包装类,继承于Number类。例:Boolean和Character两个类就是正常的属性方法封装,但是数值型的Integer类和Double类就是继承了一个Number类。
Java中的基本数据类型不是对象,无法通过向上转型获取到Object提供的方法,也无法参与转型,泛型,反射等过程。而String类就可以,因为它不是基本数据类型,属于引用类型。
为了让基本数据类型也具备对象的特性(能调用方法、功能多样),Java为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型。包装类主要提供了两大类方法:1、将本类型和其他基本类型进行转换的方法2、将字符串和本类型及包装类互相转换的方法。
拆箱:将包装类中包装的基本数据类型数据取出,即,把包装类对象转换成基本类型的值,JDK1.5之后提供自动拆箱。
装箱:将基本数据转换成包装类,使其具有对象的性质,JDK1.5之后提供自动装箱。
装箱的过程就是创建对象的过程,拆箱的过程就是调用方法的过程
手动装箱:Integer i = new Integer(10);或者 Integer i =Integer.valueOf(10);
自动装箱:Integer i = 10; JDK帮你补全代码
手动拆箱:int n = i.intValue();
自动拆箱:int n = i;
Integer和基本类型相加就会先自动拆箱称为基本类型然后再相加减
例:
int num = 10;
integer num2 = 5;//直接赋值,自动装箱
int i = num+num2;//先自动拆箱再相加减
Integer()构造器中分两种情况,在整数值不超过-128~127的范围内,会根据传入数据的值返回已经创建好的指定的对象,而超过该范围,则会重新创建不同的对象(地址肯定不同)。
在某个范围内的整数型数值的个数是有限的,而浮点数不是,所以像Double.valueOf(double d)直接new了一个新对象。
装箱拆箱的实现过程:装箱过程是通过调用包装类的valueOf方法实现的,而拆箱过程是通过调用包装类的xxxValue方法实现的。
Java中基本类型和字符串之间的转换
基本类型转换为字符串有三种方法:
- 使用包装类的toString()方法
- 使用String类的valueOf()方法
- 用一个空字符串加上基本类型,得到的就是基本类型对应的字符串
字符串转换成基本类型有两种方法:
- 调用包装类的parseXxx静态方法
- 调用包装类的valueOf()方法转换为基本类型的包装类,会自动拆箱
Date类的使用
- 创建一个代表系统当前日期的Date对象
Date d = new Date();
- 创建一个指定的时间的Date对象
使用带参数的构造器Date(int year,int month,int day)可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。//创建一个代表2022年5月1日的Date对象 Date d1 = new Date(2022-1900,5-1,1);
- 正确获得一个date对象所包含的信息
int year = d1.getYear()+1900;
int month = d1.getMonth()+1;
//获取日期
int date = d1.getDate();
int hour = d1.getHours();//默认为0
int minute = d1.getMinute();
int second = d1.getSecond();
//获取星期(东西方文化差异,0代表星期日,1代表星期一,一周从星期日开始)
int day = d1.getDay();
Calendar类
该类的功能比Date类强大,可以方便的进行日期的计算,获取日期中信息时考虑了时区等问题。而且在实现方式上也比Date要复杂一些。
Calendar类是一个抽象类,构造方法是protected的,所以无法使用Calendar类的构造方法创建对象。Calendar calendar = Calendar.getInstance();//默认为当前日期
创建一个2022年5月1日的对象Calendar c1 = Calendar.getInstance();c1.set(2022,5-1,1);
月份下标从0开始
Calendar类对象信息的设置与获得
Set设置
利用字段类型设置 例:c1.set(Calendar.DATE,1);//将该日期设置为1号,其他所有数值根据这个日期重算。
Add设置
c1.add(Calendar.DATE,10);//c1所表示对象的10天后
c1.add(Calendar.DATE,-10);//c1所表示对象的10天前
使用get()获得
//获得月份
int month = c1.get(Calendar.Month)+1;//月份下标从0开始
//获得星期
int day = c1.get(Calendar.DAY_OF_WEEK);
与Date类不同,1代表星期日,2代表星期一,以此类推。
SimpleDateFormat
默认的时间格式对我们不太友好,要想与我们日常看到的日期格式一样需要调用java.text包中的SimpleDateFormat类来对日期时间进行格式化,可以将日期转换为指定格式的文本,也可以将文本转换为日期。
//创建Date对象,表示当前时间
Date d = new Date();
//创建SimpleDateFormat对象,指定目标格式
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss”);//字母含义固定
//调用format()方法,格式化时间,转换为指定格的字符串
String today = sdf.format(d);
//输出转换后的字符串
System.out.print(today);
2022年5月1日 17:01:23
字节是计算机存储信息的基本单位,1个字节等于8位,GBK编码中的一个汉字字符存储需要2个字节,1个英文字符存储需要1个字节。一个汉字对应2个字节值,且字节值为负数,原因是每个字节是8位,最大值不超过127,如果超过就会溢出,以负数形式显示。