Java学习笔记第4天——基本数据类型的包装类、字符串类型、StringBuilder 和 StringBuffer、Math、日期类型、BigDecimal 类、面向对象的概念以及特征、类的定义

前言

 本次学习了基本数据类型的包装类、字符串类型、StringBuilder 和 StringBuffer、Math、日期类型、BigDecimal 类、面向对象的概念以及特征、类的定义


一、基本数据类型的包装类

1.什么是基本数据类型的包装类

        是基本数据类型的引用类型,提供基本数据类型的数据转换和数据操作的方法。

--byte Byte

--short Short

--int Integer

--long Long

--boolean Boolean

--float Float

--double Double

--char Character

--实现基本数据类型和引用类型之间的转换

1.自动装箱 将基本数据类型的数据封装为基本数据类型的包装类

2.自动拆箱 将基本数据类型的包装类拆封为基本数据类型的数据

2.代码演示

public class PackageData {

	public static void main(String[] args) {
		// 1、包装类中的方法 "100"+120 数据转换
		int res = Integer.parseInt("100");
		int res1 = Integer.valueOf("11");
		System.out.println(res+200);
		System.out.println(res1+200);
		// 比较方法
		System.out.println(Integer.compare(10, 10));
		// 进制转换
		System.out.println(Integer.toBinaryString(10));
		System.out.println(Integer.toHexString(10));
		System.out.println(Integer.toOctalString(10));
		//2、自动装箱、自动拆箱
		int res2 = Integer.valueOf("110");//把包装类型的拆箱成为基本数据类型
		Integer res3 = res2;//把基本数据类型封装为包装类型
	}
}

二、字符串类型

1.什么是字符串类型?

       是不可变类,并且是一个引用类型

2.创建String类型的对象

1.代码演示:

import java.io.UnsupportedEncodingException;

public class StringDemo {
	//字符串的创建及比较
	public static void main(String[] args) throws UnsupportedEncodingException {
		//了解即可
		String str4 = new String("你好".getBytes(), "GBK");
		System.out.println(str4);
		// 1、如何创建字符串的对象
		String str = "hello";//直接给字面值
		String str1 = new String("hello");//通过构造器来创建字符串对象
		String str2 = "hello";//直接给字面值
		String str3 = new String("hello");//通过构造器来创建字符串对象
		//2、判断字符串是否一致? ==是判断两个数值是否相等【基本数据类型】  ==在引用类型中是判断对象是否一致
		System.out.println(str==str1);
		System.out.println(str.equals(str1));//判断两个字符串数值是否相等使用equals方法
		System.out.println("---------");
		System.out.println(str==str2);//true \\常量池
		System.out.println(str1==str3);//false \\new出来的对象肯定是不相等的
		
		//字符串对象拼接会产生新的对象
		
	}

}

3.String的常用方法:

1.返回指定索引处的 char 值:

charAt(int index) ;

 演示代码:

// 返回str中特定位置的字符
System.out.println(str.charAt(1));

2.返回指定字符在此字符串中第一次出现处的索引:

indexOf(int ch) ;

  演示代码:

System.out.println(str.indexOf('i'));//从前面开始,返回第一个的索引
System.out.println(str.indexOf("is"));//从前面开始,返回第一个的索引

3.返回指定字符在此字符串中最后一次出现处的索引:

lastIndexOf(int ch) ;

  演示代码:

System.out.println(str.lastIndexOf('i'));//从后面开始,返回第一个的索引

4.返回此字符串的长度:

length() ;

  演示代码:

System.out.println(str.length());

5.返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的:

replace(char oldChar, char newChar);

  演示代码:

str = str.replace('i', 'I');

6.测试此字符串是否以指定的前缀开始。

startsWith(String prefix);

  演示代码:

System.out.println(str.startsWith("it"));

7.返回一个新的字符串,它是此字符串的一个子字符串:

substring(int beginIndex);

  演示代码:

System.out.println(str.substring(5));
System.out.println(str.substring(5,8));

8.将此字符串转换为一个新的字符数组:

toCharArray();

  演示代码:

//获取当前的字符串的字符数组
System.out.println(Arrays.toString(str.toCharArray()));

9.使用默认语言环境的规则将此 String 中的所有字符都转换为小写:

toLowerCase();

  演示代码:

System.out.println(str.toLowerCase());

10.使用默认语言环境的规则将此 String 中的所有字符都转换为大写:

toUpperCase();

  演示代码:

System.out.println(str.toLowerCase());

11.根据给定正则表达式的匹配拆分此字符串:

split(String regex);

  演示代码:

String[] arr = str.split(" ");
		for (String string : arr) {
			System.out.println(string);
		}

4.StringBuilder类与StringBuffer类——StringBuffer字符串变量、StringBuilder字符串变量

1.StringBuilder类与StringBuffer类是什么?

        为了减少内存空间的浪费,为了应对经常性的字符串相关的操作,谷歌引入了两个新的类——StringBuffer类和StringBuild类来对此种变化字符串进行处理。

2.当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。

        ​ 二者和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

        ​ StringBuilder是线程不安全的String增强类,StringBuilder 和 StringBuffer都是容器, 定义的api(方法)都相同        

        StringBuffer是线程安全的String增强类。StringBuffer  是一个容器,称为字符串缓冲区,该字符串缓冲区可扩展final类  

 特点: 长度可变化; 可以操作多个数据类型;通过toString()转成String

           如果对字符串进行修改时,无需创建新对象!性能相对String较好

3.StringBuilder 和 StringBuffer区别:

 StringBuilder没有线程安全(机制),而 StringBuffer有线程安全的问题

     所以,StringBuilder性能较佳

     StringBuilder版本较新

4.StringBuilder类与StringBuffer类的方法

1.获取

 char charAt(index)

 indexOf

 String substring(start,end)....

2.删除

StringBuffer delete(begin,end)   包含头,不包含尾

StringBuffer deleteCharAt(index)

  代码演示:

//		 *   StringBuffer delete(begin,end)   包含头,不包含尾
			sb =sb.delete(0, 3);
			System.out.println(sb);
		
//		 *   StringBuffer deleteCharAt(index)
			sb =sb.deleteCharAt(0);
			System.out.println(sb);

3.存储

StringBuffer append() 追加未尾

StringBuffer insert()

 代码演示:

//		 *   StringBuffer append() 追加未尾
			sb =sb.append(" me");
			System.out.println(sb);
			
//		 *   StringBuffer insert()
			sb =sb.insert(3, "me");
			System.out.println(sb);

4.修改

replace()

5. 反转

reverse()

代码演示:

sb = sb.reverse();
System.out.println(sb);

5.string与StringBuilder 和 StringBuffer三者使用场景区别

对于普通的操作,操作量不大时使用String

对于大量的更新操作,使用字符串的增强类

--单线程:StringBuilder

--多线程:StringBuffer

String<StringBuffer<StringBuilder

6.小练习

 1. "hello world"字符串,逐个单词拆分,然后以大写输出(每次一个单词换行输出)。

public class Demo1 {

	public static void main(String[] args) {
		// "hello world"字符串,逐个单词拆分,然后以大写输出(每次一个单词换行输出)。
		String str = "hello world";
		String[] arr = str.split(" ");
		for (String string : arr) {
			System.out.println(string.toUpperCase());
		}
	}
}

2.使用StringBuffer 往一个数值每隔三位(千位)插入一个','

    例如: "88123456789"-->"88,123,456,789"  

           12,345

public class Demo1 {

	public static void main(String[] args) {
		// (1)使用StringBuffer 往一个数值每隔三位(千位)插入一个','。
		StringBuffer sb =new StringBuffer("888123456789");
		for (int i=sb.length()-3;i>0;i-=3) {
		//从低位开始插入,低三位开始,i大于0【避免个数能整数时在数值前加上逗号】
			sb.insert(i, ",");
		}
		//输出sb的内容
		System.out.println(sb);
		
	}

}

三、Java常用类

1.Math:

1.abs(a):返回 int 值的绝对值。

System.out.println(Math.abs(-6));

2.max(a,b):返回两个 int 值中较大的一个。

System.out.println(Math.max(6.5, 6));

3.min(a,b):返回两个 int 值中较小的一个。

System.out.println(Math.mix(6.5, 6));

4.random() :返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。

        //随机数   greaterthan or equal to 0.0 and less than 1.0.
		for(int i=0;i<=1000;i++) {
			System.out.println((int)(Math.random()*10)+1);//0~9--->1~10
			System.out.println((int)(Math.random()*11));//0~10
		}

5.sqrt(a) :返回正确舍入的 double 值的正平方根。

        //正平方根
		System.out.println(Math.sqrt(3));
		
		//pow方法
		System.out.println(Math.pow(2, 3));
		
		//随机类
		Random ran = new Random();
		for(int i=0;i<=1000;i++) {
			System.out.println(ran.nextInt(10)+1);//提供种子值

2.日期类型:java.util.Date

获取当前日期的两种方式:

1.Date date = new Date();

2.long item = System.currentTimeMillis();

  Date date = new Date(item);

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TimeDemo {

	public static void main(String[] args) throws ParseException {
		// 1、创建时间对象,并且获取当前的系统时间
		Date date = new Date();
		System.out.println(date);
		// 2、时间戳就是1970年1月1日到现今的总毫秒数
		Date date1 = new Date(System.currentTimeMillis());
		System.out.println(date1);
		// 3、时间格式化的类 24HH
		SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		// 将date转换为字符串
		String time = sm.format(date);
		System.out.println(time);
		// 将字符串转换为date 一定要对应创建SimpleDateFormat的时间格式
		Date dateTime = sm.parse("2022-01-14 15:22:22");
		System.out.println(dateTime);
	}
}

3.日期格式化SimpleDateFormat  

1.创建SimpleDateFormat的对象:

        SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

2.使用:Date 格式化输出  String字符串

        String item = sm.format(new Date());

3.String类型表示日期  转换为  java.util.Date;

        Date dItem = sm.parse("2017-07-07 16:48:14");

4.Calendar 类

        Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

1.获取Calendar类的实例对象:

        Calendar calendar = Calendar.getInstance();

        //使用默认时区和语言环境获得一个日历。

2.设置当前时间: calendar.setTimeInMillis(System.currentTimeMillis());

或者:

        calendar.set(Calendar.YEAR, 2018);

        calendar.set(Calendar.MONTH, 7);

        calendar.set(Calendar.DAY_OF_MONTH, 6);

3.获取年份:

        calendar.get(Calendar.YEAR);

4.获取月份:(0~11)

        calendar.get(Calendar.MONTH);

5.获取当前月份的日期:

        calendar.get(Calendar.DAY_OF_MONTH);

6.获取当前时间的秒数:

        calendar.get(Calendar.SECOND);

import java.util.Calendar;

//日历类的使用、能够比较精准地获取日期数据  年 、月、日 时、分、秒  周、星期等等的日期信息
public class TimeDemo2 {

	public static void main(String[] args) {
		//1、如何获取Calendar  使用getInstance获取对象,得到当前时间信息
		Calendar c = Calendar.getInstance();
		//c.setTimeInMillis(System.currentTimeMillis());
		//
		/*c.set(Calendar.YEAR, 2021);
		//
		System.out.println(c.get(Calendar.YEAR));
		System.out.println(c.get(Calendar.MONTH));//0~11
		System.out.println(c.get(Calendar.DAY_OF_MONTH));
		System.out.println(c.get(Calendar.HOUR));
		System.out.println(c.get(Calendar.MINUTE));
		System.out.println(c.get(Calendar.SECOND));*/
		
		//获取今天是周几
		System.out.println(c.get(Calendar.DAY_OF_WEEK));//注意:周日是一周的开始{第一天}
		//获取这周是这个月的第几周
		System.out.println(c.get(Calendar.WEEK_OF_MONTH));
		//获取今天是今年的第几天
		System.out.println(c.get(Calendar.DAY_OF_YEAR));
	}

}

练习:

        获取2020和2021年的母亲节的日期;tips:5月的第二个星期日 要求:输出时间格式为yyyy年MM月dd日

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Calendar c = Calendar.getInstance();
		c.set(Calendar.YEAR, 2020);
		c.set(Calendar.MONTH,4);
		c.set(Calendar.DAY_OF_WEEK_IN_MONTH,2);
		c.set(Calendar.DAY_OF_WEEK,1);
		
		Date date = c.getTime();
		SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd");
		System.out.println(sm.format(date));
	}

}

5.BigDecimal 类

        BigDecimal 类是一个算术运算类,它可以给浮点类型的运算控制算术精度,但是要注意在创建对象是入参字符串类型的数据

    BigDecimal b1 =new BigDecimal("12.98499");
    BigDecimal b2 =new BigDecimal("3.5475");

//加法的操作

System.out.println("BigDecimal -> 0.05+0.01="+(f1.add(f2)));

//减法法的操作

System.out.println("BigDecimal -> 0.05-0.01="+(f1.subtract(f2)));

//乘法的操作

System.out.println("BigDecimal -> 0.05*0.01="+(f1.multiply(f2)));

//除法的操作

System.out.println("BigDecimal -> 0.05/0.01="+(f1.divide(f2)));

四、面向对象的概念以及特征

1.面向对象的概念

        实质上将 "数据" 与 "行为" 的过程, 以类的形式封装起来, 一切以对象为中心的

        面向对象的程序设计过程中有两个重要概念:类(class)和对象(也称为实例),其中类是某一批对象的抽象,可以把类理解成某种概念,相当于一种“模板”;对象才是一个具体存在的实体,从这个意义上来看,日常所说的人,其实都是人的实例,而不是人类

2.面向对象的特征

        (1) 封装 (2) 继承 (3) 多态

五、类的定义

1.使用class修饰类

2.类用于描述某种概念,封装类的静态特征以及动态特征

3.定义属性(成员变量、静态特征)

4.定义动态特征(行为方法)

6.练习:

定义一个老师类Teacher,其中有属性【名字、性别、职称、学科、薪酬】,提供一个教学的方法teaching()【方法效果为输出谁在教学,上什么课程内容】

--写一个测试类,创建老师对象,调用上课方法

王老师、男、职称:怪兽、学科:身体构造、10万8千8

public class Teacher {
    String name;
    String sex;
    String a;
    String b;
    String c;  
    void teaching() {
        System.out.printf("%s在教学,上%s课程内容",name,b);
    }
}
public class TeacherDemo {

         public static void main(String[] args) {
        Teacher T =new Teacher();
        T.name="王老师";
        T.sex="男";
        T.a="怪兽";
        T.b="身体构造";
        T.c="10万8千8";
        T.teaching();
    }
}

六、类与实例,实例对象的创建

1.类是抽象的

2.对象是真实存在的

3.对象的创建是通过类的构造器new出来的

4.引用类型有多少种?无数种


总结

        从面向对象开始抽象了一些,还是要多多练习,自己大脑内还没有完整的框架形成,希望能快点掌握。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值