java常用类

1. 数组

  • 定义:
    • 数组 : 类型相同,大小固定 的 很多数的组成在一起
  • 优点: 类型相同
  • 缺点:大小固定

2. 一维

2.1. 语法

  • 声明
数据类型[] 数组名; [推荐]
数据类型 数组名[];
示例:
int[] num;
String[] args;
  • 初始化

    数组名=new 数据类型[大小]; // 数组无论是全局变量或者是局部变量都会自动初始化
    数组名=new 数据类型[]{1,值2,值3};
    
  • 声明时同时初始化

    数据类型[] 数组名 = {1,值2,值3};
    数据类型[] 数组名 = new 数据类型[]{1,值2,值3};
    数据类型[] 数组名= new 数据类型[大小];
    

2.2. 访问

  • 是通过下标进行访问
  • 下标是从0开始
  • 下标的范围:0~数组长度-1
  • 取值 : 数组[下标]
  • 赋值: 数组[下标]=值;
  • 如果下标超过数组中的元素长度,会报ArrayIndexOutOfBoundsException异常

2.3. 数组的长度

  • 通过属性length可以获取
  • 数组对象.length的方式

2.4. 数组的遍历

  • 遍历即为打印数组中的所有元素、

  • 可以通过for循环

    //声明
    int[] num;
    //初始化
    //num = new int[5];
    num= new int[] {1,2,3,4};
    System.out.println(num[0]); //1
    
    //声明时同时初始化
    int[] num2 = {1,2,3};
    int[] num3 = new int[]{1,2,3};
    int[] num4 = new int[3];
    
    
    //数组属性length来表示数组的长度
    System.out.println(num.length); //4
    
    //遍历(访问数组中所有元素)
    for(int i=0;i<num.length;i++) {
        System.out.print(num[i]+"\t");
    }
    
  • 还可以通过for的加强版本,是在JDK5.0之后 提供的

    //遍历(for加强版本)
    for(int n:num) { //for(数据类型 每一个值 : 在数组里)
        System.out.print(n+"\t");
    }
    

2.5. 特征

  • 对象所在的堆中储存空间是连续的

  • 优点: 查询和修改

  • 缺点:插入和删除

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-apDe3G5u-1610499655175)(img\02.png)]

2.6. 数组的传递,即为引用传递

  • 数组作为参数传递时,只需要传递数组名即可,肯定是引用传递

  • 数组中的值传递,要看数组的数据类型;如果是值是值类型,则为值传递,值是引用类型,则为引用传递

  • 示例

    public static void main(String[] args) {
        Demo demo = new Demo();
    
        int[] nums = {1,2};
        demo.change(nums); //数组的传递,直接传数组名即可
        System.out.println(nums[0]); //50
    
    }
    
    private void change(int[] nums) {
        nums[0] = 50;
    }
    

    2.7. 冒泡排序 : 口诀:两两比较,进行交换

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CkPZMnbI-1610499655177)(img\05.png)]

    int[] nums = {12,3,4,5,6,365,2};
    		
    System.out.println("排序前的结果");
    for(int num:nums) {
        System.out.print(num+"\t");
    }
    System.out.println();
    
    //排序
    for(int i=0;i<nums.length-1;i++) {
        for(int j=0;j<nums.length-1-i;j++) {
            if(nums[j]<nums[j+1]) {
                int temp=nums[j];
                nums[j]=nums[j+1];
                nums[j+1]=temp;
            }
        }
    }
    
    System.out.println("排序后的结果");
    for(int num:nums) {
        System.out.print(num+"\t");
    }
    

3. 二维数组

3.1. 语法

// 数据类型[][] 数组名 = new 数据类型[行大小][列大小]

//先声明,
int[][] nums;
int[] nums2[];
int nums3[][];
//再初始化大小 行大小 列大小
nums = new int[3][4];
nums = new int[][]{{1,2},{3,4},{5,6}};

//声明时同时初始行和列
int[][]nums4 = new int[3][4];
int[][]nums5 = {{1,2},{3,4,33},{5,6}};
int[][]nums6 = new int[][]{{1,2},{3,4},{5,6}};

//声明时同时初始化行
int[][]nums7=new int[3][];
//再初始化列
nums7[0]=new int[2];
nums7[1]=new int[3];

3.2. 访问

  • 都是通过下标进行的

    • 行下标
      • 0~第一个中括号的行大小-1 :
      • 行大小=》 数组名.length
    • 列下标
      • 0~第二个中括号的列大小-1
      • 列大小=> 数组名[行下标].length
  • 取值

    • 数组名[行下标][列下标]
  • 赋值

    • 数组名[行下标][列下标]=值

3.3. 数组的长度

  • 行大小=》 数组名.length
  • 列大小=> 数组名[行下标].length

3.4. 遍历

  • for传统

    for(int i=0;i<nums5.length;i++) { //行
        for(int j=0;j<nums5[i].length;j++) { //列
            System.out.print(nums5[i][j]+"\t");
        }
        System.out.println();
    }
    
  • for加强

for(int[] rows:nums5) {
    for(int data:rows) {
        System.out.print(data+"\t");
    }
    System.out.println();
}

4. Arrays

  • 专门操作数组的一个类
  • 常用方法
    • sort(xxx[])
    • copyof(xxx[],数组长度)
    • binarySearch(xxx[],xxx); 两分搜索,前提条件要先排序
    • asList(T …t); 把多个数字变成集合
    • toString(xx[]) ,打印数组的内容

5. 可变参数和main方法入参

	public static void add(int ...nums) {
		//把可变参数看成数组
		//for加强
		for(int n: nums ) {
			System.out.print(n+"\t");
		}
		System.out.println();
	}
	
	
	public static void main(String[] args) {
		add();
		add(1);
		add(1,2);
		add(1,2,3);
		
		//args是系统参数,给它赋,通知JVM,右击run--configurations-->Arguments选择-->Program arguments--> 多个值之间用空格隔开
		for(String a: args ) {
			System.out.print(a+"\t");
		}
	}

6. 字符串

6.1. String

  • 字符串是由N多字符拼在一起的内容

  • 需要放置在双引号里,字符的个数,可有可无可多个

  • 最简单字符串可以写成"",但char类型最简单必须为’ ’

  • 字符串一但声明后,内容就固定,如果重新赋值,则相当于重新创建了新的字符串常量对象

    String str = "abc";
    str="abcd";
    System.out.println(str); //abcd
    
    str.concat("123"); //连接字符,新的字符串
    System.out.println(str); //abcd
    
    String newStr = str+"abc";
    System.out.println(str); //abcd
    
  • 创建方式

    • 直接赋值字符串常量

    • 通过构造方法的方式

    • 示例

      String str2 = "abc";
      		String str3 = new String("abc");
      		String str4 = new String("abc");
      	
      		
      		/*
      		 * ==
      		 * 	值类型表示值相等
      		 * 	引用类型表示地址相等
      		 * 
      		 * equals
      		 * 	在Object表示地址相等
      		 * 
      		 * */
      		
      		System.out.println(str1==str2); //true
      		System.out.println(str3==str4); //false
      		System.out.println(str1==str4); //false
      
    • 分析

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CaOX9gvR-1610499655178)(img/001.png)]

6.1.1. 字符串常用方法

System.out.println("abc".concat("123")); //abc123
System.out.println("abc123".charAt(0)); //a
System.out.println("abc123".codePointAt(0)); //97
System.out.println("abc123".contains("abc"));//true
System.out.println("abc123".startsWith("ab"));//true
System.out.println("abc123".endsWith("123"));//true
System.out.println("abc".equals("ABC"));//false
System.out.println("abc".equalsIgnoreCase("ABc"));//true
System.out.println("Abc".toUpperCase());//ABC
System.out.println("Abc".toLowerCase()); //abc
System.out.println("abc".toLowerCase().equals("ABC".toLowerCase()));//true
//现在使用UTF-8
System.out.println("abc".getBytes().length);
System.out.println("中国".getBytes().length);
System.out.println("中国".getBytes("gbk").length);
System.out.println("abc123bc".indexOf("bc")); //1
System.out.println("abc123bc".lastIndexOf("bc")); //6  从后往前找,从前往生数   
System.out.println("".isEmpty()); //true
System.out.println("abc123".length());//6
System.out.println("abcd123".substring(1, 5)); //前包后不包 bcd1
System.out.println("abcd123".substring(1)); //前包至最后 bcd123
System.out.println(Arrays.toString("abc".toCharArray()));
System.out.println(" a b c ".trim().length()); //5
System.out.println("abc123a".replace("a", "qq"));
System.out.println("abc123a".replaceAll("a", "qq"));

/*
		 * iso-8859-1  西欧码   	全部占一个字节
		 * gb2312 简单中文		中文占二个字节  英文占一个
		 * gbk 中文  			中文占二个字节 英文占一个
		 * UTF-8			中文占三个字节 英文占一个
		 * */

6.1.2. 正则

  • / 正则/

6.1.3. 用到正则的三个方法:

  • reqpalce(“要替换字符串”,“新的字符串”)和replaceAll(“正则表达式”,“新的字符串”)区别

  • matches(正则表达式)

  • split(下则表达式)

    /*正则
    		 *	^开头
    		 *	$结束
    		 *	
    		 *  ========== 内容===============
    		 *  x字符  	x字符
    		 *	\d 数字         [0-9]
    		 *  \D 非数字     [^0-9]
     		 *  \w 字母和数字 [0-9a-zA-Z]
     		 *  \W 非字母、非数字  [^0-9a-zA-Z]
     		 *  \s 空白
    		 *  \S 非空白
    		 *  
    		 *  a|b
    		 *  [0-9]
    		 *  [^0-9]
    		 *  [1,3,5]
    		 *  
    		 *  . 任意字符
    		 *  
    		 *  
    		 *  ==========有多少=========
    		 *  * 可有可无可多少
    		 *  + 至少有一个
    		 *  ? 至多有一个
    		 *  {6}
    		 *  {6,}
    		 *  {6,10}
    		 *  
    		 *  
    		 */ 
    String regExpress="\\w{5}\\d";
    System.out.println("ab1231".matches(regExpress));
    
    String phone="1\\d{10}";
    System.out.println("12345678901".matches(phone));
    
    //replace() replaceAll()区别 ?
    System.out.println("abc1223a".replace("\\w", "qq"));
    System.out.println("abc1223a".replaceAll("\\w", "qq"));
    System.out.println(Arrays.toString("aa,bb,cc".split(",")));
    System.out.println(Arrays.toString("abcbd".split("b"))); //[a,c,d]
    System.out.println(Arrays.toString("a.b.c".split("."))); //[]
    

6.2. StringBuffer

  • String定义后生成字符串常量 ,在常量区 ; 如果改变String的内容,相当于重新生成新的字符串常量对象重新赋值之前String引用
  • StringBuffer 内容存储在堆中,改变是自身。
  • 根据上述的特点
    • String 查询和修改效率高
    • StringBuffer 增加和删除效率高,

6.3. StringBuilder

  • StringBuffer 内容存储在堆中,改变是自身。
  • StringBuffer 增加和删除效率高,
  • StringBuffer和StringBuilder区别?
    • StringBuffer线程同步
    • StringBuilder线程不同步
    • 在没有线程安全的情况下,StringBuilder效率更高
      • 用到线程使用StringBuffer
      • 未用到线程使用StringBuilder,现在很场景不考虑线程安全,使用StringBuilder概率大
  • toString()变成String,就可以使用N多String常用方法

6.4. 小小练习

  • 下面代码内容中创建了几个对象 (8)
String s3="aaa"+"b";				//1   java编译优化,常量会先计算
String s1="aaa";					//1
String s2="b"						//1
String r1 = new String("aa");		//2

String s4=s1+s2;					//1   => new String(s1+s2);
String s5 =s1.substring(1);			//1
s1.concat("b");						//0					
StringBuilder sb = new StringBuilder(s1);	//1
sb.append("456")					

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aQcl0U1D-1610499655181)(img\002.png)]

8. 其它类

8.1. 日期类Date

  • Date: 日期类

    • new Date()

    • getTime()

      Date now = new Date();
      System.out.println(now);
      System.out.println(now.getTime());
      
      // long begin = now.getTime()
      // 方法()
      // long cost = now.getTime()-begin;
      
      System.out.println(1900 + now.getYear());
      System.out.println(1+now.getMonth());
      System.out.println(now.getDate());
      System.out.println(now.getHours());
      System.out.println(now.getMinutes());
      System.out.println(now.getSeconds());
      
      System.out.println(now.toLocaleString());
      
  • Calendar : 日历类

    • getInstance()

    • get()

      //创建Calendar的实例 
      Calendar c = Calendar.getInstance();
      
      //获取年份
      System.out.println(c.get(Calendar.YEAR));
      System.out.println(c.get(Calendar.MONTH)+1);
      System.out.println(c.get(Calendar.DATE));
      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.MILLISECOND));
      
  • SimpleDateFormat : 日期的格式化

    • new SimpleDateFormat (String pattern)
    yyyy 年
    MM 月
    dd 日
    HH(24|hh(12) 时
    mm 分
    ss 秒
    SSS 毫秒
    
    • String format(Date)
    • Date parse(String)
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
    //把日期转成字符串
    Date now = new Date();
    String strNow = sdf.format(now);
    System.out.println(strNow);
    
    //把字符串转成日期
    Date newDate = sdf.parse("2018-09-06 10:29:24:870");
    System.out.println(newDate);
    

8.1. 数学Math

  • 属性

    • PI
    • E
  • 方法

    • abs() 绝对值
    • sqrt() 平方根
    • max() 最大值
    • min() 最小值
    • ceil() 天花板
    • floor() 地板
    • round() 四舍五入
    • random() 随机数 0~1

8.1. 随机类Random

  • 生成随机数类
  • 常用
    • nextInt()
    • nextLong()
    • nextBoodlean()
    • nextFloat()
    • nextDouble()

7. 作业

  • 接受用户录入的一串字符:如abc123^&*,统计:字母个数,数字个数和其它个数

  • 接受用户录入的一串数字: 如aaabbcc111,统计每个字母出现个数

  • 接受用户录入的字符串实现加密和解密 (a^b=c a^c=b)

  • 接受用户录的的字符串,实现反序输出

  • 研究邮箱和手机号的正则表达式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值