JAVA基础学习笔记(四)

/ 0评 / 0
API
===================================
  * Application Programming Interface
    应用编程接口
  
  * 一切可以调用的东西


java.lang 包
===================================
  * lang -  language
  * java 语言包
  * 自动导入
      
      String
      System



java.lang.Object
======================================

java.lang.String
java.lang.StringBuilder
java.lang.StringBuffer
正则表达式
java.util.regex.Pattern
java.util.regex.Matcher
======================================

基本类型包装类
java.lang.Number
java.math.BigDecimal
java.math.BigInteger
java.text.DecimalFormat
java.lang.Math
======================================

java.util.Date
java.text.SimpleDateFormat
java.util.Calendar
java.util.GregorianCalendar
======================================




Object
=======================================
  * java 所有类的顶层父类
  * 如果不继承其他类,默认继承 Object
      
      class A /*extends Object*/ {
          
      }
  
  方法
  ----------------------------------
    toString()
      
      获得对象的字符串表示
      Object默认实现是:
          
        "tarena.day1301.Point@9a4bf81"
        类名@内存地址
      
      如果需要,可以在子类中重写这个方法
    
    equals(Object obj)
      
      当前对象与参数对象 obj 比较是否相等
      Object 中默认实现是:
          
          比较内存地址
          this == obj
      
      如果需要,可以重写这个方法

    hashCode()
      获得对象的哈希值
      Object中默认实现是: 
        
        用对象的内存地址作为哈希值
      
      如果需要,在子类中重写 hashCode()
      使用属性计算产生哈希值 
 


String
==========================================
  * 封装 char[] 数组的对象
  
  * 字符串的字面值 "abc"
      
      *)第一次用到一个字面值时,
        在“字符串常量池”中新分配内存
      
      *)再次用到相同的字面值时,
        直接访问“常量池”中已经存在的对象
  
  * 字符串不可变
  
      *)字符串加号连接效率低,
        每次连接都会新建字符串对象
  
      String s1 = "abc";
      String s2 = "def";
      String s3 = "ghi";
      String s4 = s1 + s2 + s3;
  
  
  创建对象
  --------------------------------------
    1.char[] a = {'h','e','l','l','o'};
      String s = new String(a);
    
    2.第一种方式的语法简化
      String s = "hello";
      
  方法
  --------------------------------------
    charAt(int index) 
    
        s = "abc";        
        char c = s.charAt(0);
        
		toUpperCase() 
		
        s = s.toUpperCase()
        print(s)
		
		toLowerCase()
		length()
		
		compareTo(String anotherString) 
		compareToIgnoreCase(String str) 忽略大小写
				与另一字符串按编码表顺序比较大小
				
				当前字符串大,返回正数
				当前字符串小,返回负数
				大小相同,返回0
				
		startsWith(String s)	
		
		    s = "http://........"
		    boolean b = s.startsWith("http://")
			
		endsWith(String suffix) 
				是否以指定的子串开头或结尾
		equals(Object anObject) 
		equalsIgnoreCase(String anotherString) 忽略大小写
				比较字符串内容是否相同
		indexOf(String s) 
		
		    s = "abc abc abc";
		    int index = s.lastIndexOf("xxxx");
		
		indexOf(String s, int fromIndex) 从指定位置向后寻找
				获得指定子串的位置,不存在,返回 -1
		lastIndexOf(String s) 
				从后向前寻找子串的位置
		replace(char oldChar, char newChar) 
				将指定的字符替换为新的字符
				
				
				s = "abc abc abc";
				String s2 = s.replace('a', '-');
				System.out.println(s2);
				
		substring(int a) 从 a 位置直到结束
		
		    s = "abcdefg";
		    Strring s2 = s.substring(3, 5);
		    System.out.println(s2);
		
		substring(int a, int b) 
				获得 [a, b) 位置范围的子串
		trim() 
				去除两端空白字符
				
				s = "   a  bc   ";
				s = s.trim();
				System.out.println(s);
				
		getBytes()					将 unicode 转为默认编码格式的字节数组
		getBytes(字符编码)	将 unicode 转为指定编码格式的字节数组
		String.valueOf(数据)
				将任何数据转为字符串
				
	  正则表达式相关方法
	  ----------------------------------
	      matches(正则表达式)
	          
	          判断当前字符串,能否与正则表达式匹配
	      
	      replaceAll(正则表达式, 子串)
	          
	          将找到的匹配子串,替换为新的子串
	      
	      split(正则表达式)
	          
	          用匹配的子串,拆分字符串
	          abc,def,ghi,jkl



StringBuilder
StringBuffer
==========================================
  * 可变的字符序列
  * 封装 char[] 数组
  * 经常用来代替 String 做高效率字符串连接
      
      sb.append("abc")
  
  * StringBuilder   线程不安全,效率高
    StringBuffer    线程安全
  
  
  创建对象
  -------------------------------------
    1.StringBuilder sb = new StringBuilder();
        
        空串
    
    2.StringBuilder sb = new StringBuilder("abc");
        
        abc
  
  方法
  -------------------------------------
    append()
				在字符序列末尾,追加字符
				高效的字符串连接
		delete(int start, int end) 
				删除 [start, end) 
		deleteCharAt(int index) 
				删除单个字符
		insert(int index, 子串)
				在 index 位置,插入一个子串
		replace(int start, int end, String str) 
				将 [start, end) 替换为指定字符串 str
		reverse() 
				翻转
		setCharAt(int index, char ch) 
				将 index 位置替换为字符 ch
		toString()
				转为 String 类型

      

正则表达式 Regex
===============================================
  * 正确的字符串格式规则
  * 百度“正则表达式大全”
  
  正则表达式        匹配的字符串
  ---------------   ------------------
  k                 k
  abc               abc
  [abc]             a, b, c
  [a-z]             a, z, e, u
  [a-zA-Z_0-9]      a, A, z, Z, 0, 9, _
  [^a-zA-Z]         9, _, $, 中
  \d                数字
  \D                排除数字
  \w                单词字符[a-zA-Z_0-9]
  \W                排除单词字符[^a-zA-Z_0-9]
  \s                空白字符
  \S                排除空白字符
  .                 任意字符
  [\u4e00-\u9fa5]   中文范围
  
  [abc]?            0或1个  a,,b,c
  [abc]?[123]       a1,a2,a3,b1,b2,3,1,2,c3
  
  [abc]*            0到多个  a,,aaa,bbb,abc,cba,abcabcabcabcacbccabccac
  [abc]+            1到多个
  [abc]{3}          3个, aaa,abc,cba,bbc,cca,cba
  [abc]{3,5}        3到5个, abc,abca,abcab
  [abc]{3,}         3到多个, abc,abca,abcabcabcabcabcabcacbc
  
  |                 或




java.util.regex.Pattern
java.util.regex.Matcher
========================================
  * Pattern 封装正则表达式
  * Matcher 封装正则表达式和要匹配的字符串
  
  创建对象
  ---------------------------------
    Pattern p = Pattern.compile(正则表达式);
    Matcher m = p.matcher(要匹配的字符串);
  
  Matcher 方法
  ---------------------------------
    find()
      向后查找下一段匹配的子串
      返回 boolean 值,表示是否找到下一段
      
    find(int from)
      从指定位置向后找
      
    group()
      获取刚刚找到的子串
      
    start()
    end()
      获取刚刚找到的子串的起始和结束位置



基本类型包装类
=============================================
  byte      Byte
  short     Short
  int       Integer
  long      Long
  float     Float
  double    Double
  char      Character
  boolean   Boolean
  
  java.lang.Number
  -------------------------------
    *)数字包装类的抽象父类
    *)子类:
        Byte
        Short
        Integer
        Long
        Float
        Double
        
        BigDecimal
        BigInteger
    
    方法
    -----------------------------
      取值方法
      byteValue()
      shortValue()
      intValue()
      longValue()
      floatValue()
      doubleValue()
  
  Integer
  ---------------------------------
    创建对象
    -----------------------------
      1.Integer i = new Integer(23);
      
      2.Integer i = Integer.valueOf(23);
          
          Integer类中存在封装-128到127
          的缓存对象,
          范围内的值,直接访问存在的缓存对象,
          范围外的值,是新建对象
          
    方法
    -----------------------------
      *)从父类继承的6个取值方法
      *)字符串解析成数字
          
          Integer.parseInt("255")             255
          Integer.parseInt("11111111",2)      255
          Integer.parseInt("377",8)           255
          Integer.parseInt("ff",16)           255

      *)进制转换
          
          Integer.toBinaryString(255)         "11111111"
          Integer.toOctalString(255)          "377"
          Integer.toHexString(255)            "ff"

  
  Double
  --------------------------------------------------
    创建对象
    --------------------------------------
      1.Double d = new Double(3.14);
      
      2.Double d = Double.valueOf(3.14);
          
          与 new 相同
    
    方法
    --------------------------------------
      *)从父类继承的6个取值方法
      *)字符串解析成数字
          
          Double.parseDouble("3.14")
              
              Short.parseShort()
              Long.parseLong()
              Float.parseFloat()
              Boolean.parseBoolean()
              ...
      
      *)对特殊值进行检查
          
          Infinity      3.14/0
          NaN           Math.sqrt(-2)
          
          
          Double.isInfinite(double d)
          Double.isNaN(double d)
          
    
  自动装箱、自动拆箱
  ---------------------------------------------
    自动装箱
    ---------------------------
      Integer a = 23;
      编译成:Integer a = Integer.valueOf(23);
    
    自动拆箱
    ---------------------------
      int i = a;
      编译成:int i = a.intValue();
      
      a = a + 1;
      编译成:a = Integer.valueOf(a.intValue() + 1);
      
      *)自动拆箱要当心 null 值



java.math.BigDecimal
java.math.BigInteger
=====================================
  * BigDecimal 精确浮点数运算
  * BigInteger 大整数运算,可以超出 long 范围
  
  创建对象
  --------------------------------
    BigDecimal bd = BigDecimal.valueOf(2);
  
  方法
  --------------------------------
    add(BigDecimal bd)
    subtract(BigDecimal bd)
    multiply(BigDecimal bd)
    divide(BigDecimal bd)
    divide(BigDecimal bd, 保留位数, 舍入方式)
    
    舍入运算
      
      setScale(保留位数, 舍入方式)
        舍入运算结果,被封装成新的 BigDecimal 对象
    
    取值
      
      *)从 Number 继承的6个取值方法
      *)作为字符串取出
          
          toString()




java.text.DecimalFormat
==========================================
  * 数字格式工具
  * 数字 --> 数字格式的字符串
  * 数字格式的字符串 --> 数字
  
      "¥32,563,735.900"
  
  创建对象
  -------------------------------
    DecimalFormat f = new DecimalFormat(格式);
    
      格式: 参考 DecimalFormat 的 API 文档
      
          "\u00A4###,###.000"
  
  方法
  -------------------------------
    format(数字)
         数字格式化成字符串
    
    parse(字符串)
         字符串解析成数字
         返回 Number 类型对象
    
    applyPattern(格式)
         修改格式
          
          
         

java.lang.Math
======================================
  Math.PI
  Math.E
  Math.sqrt()
  Math.random()
  Math.pow()
  Math.max()
  Math.min()
  Math.sin()
  Math.cos()
  Math.tan()
  ...



java.util.Date
==========================================
  * 封装一个毫秒值,表示一个时间点
      
      毫秒值: 1970-1-1 0点开始的毫秒值
  
  创建对象
  ------------------------------------
    1. Date d = new Date();
    
          封装系统当前时间毫秒值
    
    2. Date d = new Date(600000000000L);
          
          封装指定的毫秒值
  
  方法
  ------------------------------------
    getTime()
    setTime(long t)
      
      存取内部毫秒值
    
    compareTo(Date d)
      
      当前对象与参数对象d比较大小
      当前对象大,正数
      当前对象小,负数
      大小相同,0



java.text.SimpleDateFormat
===========================================
  * 日期格式工具
  * Date对象 --> 日期格式的字符串
  * 日期格式的字符串 --> Date对象
  
  创建对象
  ---------------------------------------
    SimpleDateFormat f = new SimpleDateFormat(格式);
    
      格式:参考 SimpleDateFormat 文档
          
          "yyyy-MM-dd HH:mm:ss"
          "dd/MM/yyyy"
          "yy-M-d H:m"
          "yyyy年MM月dd日"
  
  方法
  ---------------------------------------
    format(Date对象)
      Date对象格式化成字符串
      
    parse(字符串)
      字符串解析成 Date 对象
      
    applyPattern(格式)
      修改格式
    
  
  
  

java.util.Calendar
=========================================
  * 日历抽象父类
  * 封装毫秒值表示一个时间点
  * 提供一组时间运算处理方法
  
  创建对象
  ----------------------------------
    1.Calendar c = new GregorianCalendar();
    
    2.Calendar c = Calendar.getInstance();
          
          在某些地区,可能创建当地历法,
          中国就是 GregorianCalendar
    
  方法
  ----------------------------------
      get(字段)
					
					获得日期中指定字段的值,例如:
					
					c.get(Calendar.YEAR)
					c.get(Calendar.HOUR_OF_DAY)
			
			set(字段, 值)
					
					修改指定字段的值
			
			set(int year, int month, int date, int hourOfDay, int minute, int second)  
			
					设置年月日时分秒
			
			add(int field, int amount) 
			
					在指定字段上加一个值
					
					c.add(Calendar.YEAR, 10)
			
			compareTo(Calendar anotherCalendar) 
			
					与另一个时间比较大小
					当前Calendar实例大,返回正数
					当前Calendar实例小,返回负数
					相同大小,返回0
			
			getActualMaximum(int field) 
					
					获得指定字段实际最大值,
					用来获得月中的最大天数
			
			星期日 - 1
			星期一 - 2
			星期二 - 3
			星期三 - 4
			星期四 - 5
			星期五 - 6
			星期六 - 7
			
			
					
			getTime() 
			
					获得表示相同时间的 Date 类型实例
			
			setTime(Date date) 
			
					将时间设置为指定 Date 实例所表示的时间
			
			getTimeInMillis() 
			setTimeInMillis(long millis) 
			
					毫秒值存取方法

  
  
  
java.util.GregorianCalendar
=========================================
  * 日历子类
  * 罗马历,即“公历”或“阳历”




练习
=============================================
  1.
    从 email 获取名字
        abc@def.com --> abc
    
    是否是“回文”
        正着念反着念都相同
        abcdefedcba
        
    翻转字符串
        abc --> cba


  2.
    获得字符串中的连续数字
      
      sdrg5647wqe4wer4786w4ertw83er76474w
      
      5647
      4786
      76474

  3.
    填写生日
    显示“您已经生存了 xxx 天”

评论已关闭。