java进阶3-常用类

String

唯一可以直接赋值的引用类型(不用new),由于字符串操作对内存来说,太耗性能,java把String单拎出来。
String name= “wang”
先在方法区中的常量池中,寻找有没有wang这个字符串,有就不在创建,把wang这个字符串的引用赋值给name这个变量,没有则创建字符串,“wang“这个字符串创建之后,就不在改变,这就常说的“字符串不可变”,而不是说属性name不可变,name可以改变赋值为其他引用。
String shu = new shu(“shu”)
先进行上述的流程,然后在new,在堆中创建“shu”这个字符串对象。

注意,加了双引号的字符串,编译期间先放到方法区常量池中,如果字符串要进行相加相减则在堆中在创建一份。

String str = "abc";//在常量池中创建abc
        String str1 = "abcd";//在常量池中创建abcd
        String str2 = str + "d";//拼接字符串,此时会在堆中新建一个abcd的对象,因为str2编译之前是未知的
        String str3 = "abc" + "d";//拼接之后str3还是abcd,所以还是会指向字符串常量池的内存地址
        System.out.println(str1 == str2);//false 比较内存地址是否相等
        System.out.println(str1 == str3);//true 比较值是否相等

        System.out.println(str1.equals(str2));//比较内容是否相等

StringBuffer和StringBuider

StringBuffer

StringBuffer与String最大不同,是StringBuffer可变

StringBuffer原理

先在堆中申请一块内存,存放字符序列,随着字符序列增大而扩大内存。

 StringBuffer zhong = new StringBuffer();
       for(int i= 0;i<10;i++) {
           zhong.append(i).append(",");
       }

StringBuider

方法同StringBuffer一样,区别StringBuffer线程安全,速度慢,而StringBuider,线程不安全,速度快。

// 使用StringBuilder也是可以完成字符串的拼接。
        StringBuilder sb = new StringBuilder();
        sb.append(100);
        sb.append(true);
        sb.append("hello");
        sb.append("kitty");
        System.out.println(sb);

包装类 基本类型对应

因为8种基本数据类型不够用。所以SUN又提供对应的8种包装类型。

byte-----Byte
short —Short
int -------integer
long ----Long
float ----Float
double -----Double
char -------Character
boolean ----Boolean

常用方法

valueOf()
parse***,
intValue()

Integer i = new Integer(123);

自动装箱和自动拆箱

基本数据类型 --(自动转换)–> 包装类型:自动装箱
包装类型 --(自动转换)–> 基本数据类型:自动拆箱
integer a= 100;装箱
int b =a; 拆箱

 // 900是基本数据类型
        // x是包装类型
        // 基本数据类型 --(自动转换)--> 包装类型:自动装箱
        Integer x = 900;
        System.out.println(x);

        // x是包装类型
        // y是基本数据类型
        // 包装类型 --(自动转换)--> 基本数据类型:自动拆箱
        int y = x;
        System.out.println(y);

日期类

java.util.Date 日期
java util calendar 日历
java.text.SimpleDateFormat 格式

Date nowTime = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");

数字类

java.text.DecimalFormat 数字格式类
java.math.BigDecimal 精密数据

BigDecimal v1 = new BigDecimal(100);

DecimalFormat df = new DecimalFormat("###,###.##");

随机数类 Random

java.util.Random

 // 创建随机数对象
        Random random = new Random();

        // 随机产生一个int类型取值范围内的数字。
        int num1 = random.nextInt();

        System.out.println(num1);

枚举类

enum
创建指定的实例对象用于使用

原理

在类的第一行写上已创建好的实例,实例默认是静态的,可以类名.实例对象名的方式获取。当然也可在枚举类中声明set(形参)函数实现创建好的变量的属性进行操作,在其他类中已枚举类名.valueof(变量名的方式)获取实例对象,再调用set(实参)函数设置实例对象的属性。当然在开发中,最好把实例对象的属性也写死。

  1. 枚举类默认final,不可继承,也不能用new()这样的方式创建实例对象,要用**枚举类名。valueOf(实例对象名)**的方式获取实例
    因为已经创建好了,就没必要再使用new()的方式创建实例了,而且,枚举类的构造函数是用private修饰的,在类外部也不能用new()调用构造函数,这是统一的。
  2. 创建好的实例对象是类的属性,默认用public static final 修饰
  3. 枚举类通常设置为不可变。
  4. 媒体类如同实例对象的集合。
1、枚举是一种引用数据类型
    2、枚举类型怎么定义,语法是?
        enum 枚举类型名{
            枚举值1,枚举值2
        }
    3、结果只有两种情况的,建议使用布尔类型。
    结果超过两种并且还是可以一枚一枚列举出来的,建议使用枚举类型。
        例如:颜色、四季、星期等都可以使用枚举类型。
 */
public class EnumTest02 {
    public static void main(String[] args) {
        Result r = divide(10, 2);
        System.out.println(r == Result.SUCCESS ? "计算成功" : "计算失败");
    }

    /**
     * 计算两个int类型数据的商。
     * @param a int数据
     * @param b int数据
     * @return Result.SUCCESS表示成功,Result.FAIL表示失败!
     */
    public static Result divide(int a, int b){
        try {
            int c = a / b;
            return Result.SUCCESS;
        } catch (Exception e){
            return Result.FAIL;
        }
    }
}

// 枚举:一枚一枚可以列举出来的,才建议使用枚举类型。
// 枚举编译之后也是生成class文件。
// 枚举也是一种引用数据类型。
// 枚举中的每一个值可以看做是常量。
enum Result{
    // SUCCESS 是枚举Result类型中的一个值
    // FAIL 是枚举Result类型中的一个值
    // 枚举中的每一个值,可以看做是“常量”
    SUCCESS, FAIL
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值