Loading... # 黑马视频(7/3) ---- ## Java SE ---- ### day12 常见对象的介绍 * Scanner 一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器 * hasNextxxx() ,判断下一位是不是这个类型的。如果要判断是否包含下一个字符串,可以省略xxx * nextXXX() ,获取下一个输入项,默认情况下,Scanner 使用 空格、回车作为分隔符。 * nextInt(),获取一个 int 类型的值 , nextLine() ,获取一个 String 类型的值 ,当着两个同时使用并且 nextInt() 在前面,nextLine() 在后面 并且只有一个对象进行录入的时候,会把int 录入结束后的回车 ( /r/n ) ,当做录入 String 的结束标志,也就是说 String 对象是无法进行输入的, * 解决方法一:创建两个录入对象,分别对其进行录入,但是浪费空间 * 解决方法二:键盘录入的都是字符串,都用 nextLine 方法 ,后面会学习将 整数字符串转为整数的方法。 * 字符串 “ abc ” 可以看做是 一个字符串对象,可以调用 String 中的方法, * 字符串是常量,一旦被赋值,就不能被改变,要改变的话,原来的字符串就没有了,换为了一个新的字符串 * String 类重写了 toString 方法,返回的是该对象本身。 * 常见构造方法: * public String():空构造 * public String(byte[] bytes):把字节数组转成字符串 * public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串 * public String(char[] value):把字符数组转成字符串,之间可以相互转换 * public String(char[] value,int index,int count):把字符数组的一部分转成字符串 * public String(String original):把字符串常量值转成字符串 * String 类型的字符串的比较 * String sc = new String("xxxabc") ; 创建的是两个对象,一个在常量池中,一个在堆内存中,最终会把堆中的地址给 sc * String sc = "xxx" ; 只创建一个对象在 常量池中 * String sc = x + "xx" ; 先在队中创建对象利用 append 添加到缓冲区(一个地址),再利用 toString 转换为String 对象( 第二个地址 ),将这个地址值赋给 sc . * String sc = "a" + "b" + "c" ; 和 String sc1 = "abc" ; 是相等的,因为 java 中有常量优化机制,在编译时 sc = "abc" ; * 任何数据用 “ + ” 相连接,都会产生新的字符串 * 创建的 String 类型的对象要进入常量池,常量池是方法区的一部分。如果常量池有这个 String 对象,就指向它(地址赋给新建的 String 类型变量 ),如果没有就创建一个,将地址返回给 String 类型的变量 * == 判断的是地址,当两个 String 类型字符串相等时,指向的地址也相等,所以返回 true * 字符串的判断: * boolean equals(Object obj):比较字符串的内容是否相同,区分大小写 * boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写,不区分大小写 * boolean contains(String str):判断大字符串中是否包含小字符串 * boolean startsWith(String str):判断字符串是否以某个指定的字符串开头 * boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾 * boolean isEmpty():判断字符串是否为空。 * " " 和 null 的区别: * " " 是字符串常量,同时也是一个 String 类的对象,既然是对象当然可以调用 String 类中的方法 * null 是空常量,不能调用任何的方法,否则会出现空指针异常,null 常量可以给任意的引用数据类型赋值。 * 如果是 字符串常量和字符串变量比较,一般都是将字符串放在前面调用方法,将变量当做参数传递,防止空指针异常 * String类的获取功能 * int length(),获取字符串的长度。数组中的 length 是属性,String中的 length 是一个方法,获取的是每一个字符的个数, * char charAt(int index), :获取指定索引位置的字符,返回的是一个 char 类型的。 * int indexOf(int ch),返回指定字符在此字符串中第一次出现处的索引。 * int indexOf(String str),返回指定字符串在此字符串中第一次出现处的索引。不存在返回的就是 -1 。 * int indexOf(int ch,int fromIndex),返回指定字符在此字符串中从指定位置后第一次出现处的索引。 * int indexOf(String str,int fromIndex),返回指定字符串在此字符串中从指定位置后第一次出现处的索引。 * lastIndexOf(String xx) ,从后向前找,第一个出现字符的索引 * lastIndexOf(String xx , int xxx) ,从指定位置向前找,第一个出现字符的索引 * String substring(int start),从指定置开始截取字符串,默认到末尾。 * String substring(int start,int end),从指定位置开始到指定位置结束截取字符串。包含头,不包含尾。左闭右开。 *String的转换功能: * 编码:把我们看得懂的,转换为计算机看得懂的。gbk 码表中一个中文代表两个字节,gbk码表特点:中文第一个字节肯定是负数。 * byte[] getBytes(),把字符串转换为字节数组。 字母会按照 表转换为 数字 * char[] toCharArray(),把字符串转换为字符数组。,也可以用来遍历字符数组 * static String valueOf(char[] chs),把字符数组转成字符串。 * static String valueOf(int i),把int类型的数据转成字符串。 * 注意:String类的 valueOf 方法可以把任意类型的数据转成字符串, * String toLowerCase(),把字符串转成小写 * String toUpperCase(),把字符串转成大写。 * String concat(String str),把字符串拼接,传入的必须都是字符串才行 * 链式编程:只要保证每次调用完返回的是对象,就可以继续调用 * String的替换功能 * String replace(char old,char new),要替换的不存在的话就不改变 * String replace(String old,String new) * String的去除字符串两空格 * String trim() ,只是去掉两端的。 * String的按字典顺序比较两个字符串 * int compareTo(String str) * int compareToIgnoreCase(String str) ---------- ### day13 StringBuffer * String 是一个不可变的字符序列, * StringBuffer 是一个可变的字符序列,是一个线程安全的可变字符序列,是字符串缓冲区,当 new 的时候是在堆内存中创建了一个对象,底层是一个长度为 16 的字符数组,当调用添加的方法时,不会再重新创建对象,再不断地向原缓冲区中添加字符。是安全的,效率低 * StringBuilder 也是一个可变的字符序列是一个不同步的,不安全,速度快,效率高 * String 类虽然是引用数据类型,但是当他作为参数传递的时候和基本数据类型是一样的。一旦被初始化就不会被改变。 * StringBuffer 作为参数传递,会被改变。 * StringBuffer 的构造方法: * public StringBuffer() ; 无参构造方法 * public StringBuffer(int capacity) ; 指定容量的字符缓冲区 * public StringBuffer(String str) ; 指定字符串内容的字符串缓冲区对象 * StringBuffer 方法: * public int capacity() ,返回当前容量 ,理论值 * public int length() ,返回长度(字符数),实际值 * public StringBuffer append(String arr) ; 将任意类型的数据添加进字符串缓冲区,并返回字符串缓冲区本身 * public StringBuffer insert( int offset , String arr ) ; 在指定位置把任意类型的数据插入到字符串缓冲区中,并返回字符串缓冲区本身 。 如果没有指定位置的索引就会引起越界异常 * public StringBuffer deleteCharAt(int index) ; 删除指定位置的字符,并返回本身 * public StringBuffer delete( int start , int end ); 删除从指定位置开始到指定位置结束的内容,并返回本身。 * xx.delete(0,xx.length()) ; 清空缓存区 * public StringBuffer replace( int start , int end , String str ) ,从 strat 开始到 end 用 str 替换,不包含末尾 * public StringBuffer reverse( ) ; 字符串反转 * public String sustring(int start) ,从指定位置截取到末尾,产生的是一个新字符串,原来跌没有改变 * public String substring( int start , int end ) , 截取从指定位置开始到结束位置,不包含结束位置。 返回值不再是StringBuffer 本身,而是一个 String * Sring ---> StringBuffer ,通过构造方法,通过 append () 方法 * StringBuffer ---> String ,通过构造方法,通过 toString() 方法,通过subString( 0 , length ), * 因为 to 与 2 发音一样,所以就用 2 替代 to ,到现在演变为了一种书写习惯。 * StringBuilder 和 StringBuffer 的方法基本相同。 * 冒泡排序 与 选择排序 * 二分查找的前提是数组是有序的, * Arrays 的几个对数组的操作: * Arrays.toString() ,将数组转为字符串 * Arrays.sort(arr),将数组排序,用的是快速排序 * Arrays.binarySearch(xx,xx),二分查找,返回索引值,不存在返回 - ( 插入点 + 1 ) * 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据,常用操作是基本数据类型和字符串之间的转换。 * Integer 类型: * MAX_VALUE :最大值 * MIN_VALUE :最小值 * 构造方法可以接受 String 类型 字符串或者 imt 类型 数字。 * int --- String * 和 "" 进行拼接 推荐 * public static String valueof( int i ) 推荐 * int -- Integer -String ( Integer 的 toString 方法 ) * public static String toString ( int i ) ( Integer 的静态方法 ) * String ---- int * String --- Integer --int * intValue( ) ,将 Integer 类型转换为 int 类型 , * public static int parseInt( String s ) , 将 String 转换为 一个 int 数 ,推荐 * 基本数据类型包装类 有八种,其中七种都有 parseXxx 方法,可以将这七种的字符串表现形式转换成基本数据类型。 * char 的包装类 Character 中没有 parseXXX 方法,字符串到字符的转换通过 toCharArray() 就可以将字符串转换为字符串数组 * 自动装箱:把基本类型转换为包装类类型 * 自动拆箱:把包装类类型转换为基本类型 * 当Integer = NULL ,会报空指针异常,自动装箱会调用 intValue() ,如果为空,就会出现空指针异常 * Integer 的equals 方法比较的是属性值。 * -128 到 +127 是 byte 的取值范围, 如果在这个取值范围内,自动装箱就不会创建新对象,而是从常量池中获取,如果超过了这个范围,就需要重新创建对象。原码:存了一个数组,0 对应 -127 ,最大 255 对应 128 。 -------- ### day14 正则表达式 * 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。 * 字符类 * [abc] a、b 或 c(简单类) * [^abc] 任何字符,除了 a、b 或 c(否定) * [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围) * [0-9] 0到9的字符都包括 * 预定义字符类 * . 任何字符。 * \d 数字:[0-9] * \w 单词字符:[a-zA-Z_0-9] * Greedy 数量词 * X? X,一次或一次也没有 * X* X,零次或多次 * X+ X,一次或多次 * X{n} X,恰好 n 次 * X{n,} X,至少 n 次 * X{n,m} X,至少 n 次,但是不超过 m 次 * 正则表达式的分割功能,根据给定的正则表达式拆分此字符串,返回一个字符串数组。 * String类的功能:public String[] split(String regex) * 正则表达式的替换功能 * String类的功能:public String replaceAll(String regex,String replacement) * 正则表达式的分组功能 * 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组: 1 ((A)(B(C))) 2 (A 3 (B(C)) 4 (C) 组零始终代表整个表达式。 * Pattern 、 Matcher、 典型的调用顺序是 * Pattern p = Pattern.compile("a*b"); * Matcher m = p.matcher("aaaaab"); * boolean b = m.matches(); * Math 方法概述:Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。 * 成员方法 * public static int abs(int a) * public static double ceil(double a) * public static double floor(double a) * public static int max(int a,int b) min自学 * public static double pow(double a,double b) * public static double random() * public static int round(float a) 参数为double的自学 * public static double sqrt(double a) * Random 用于产生随机数,如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。采用纳秒值当做种子产生随机数 * Random 构造方法 * public Random() * public Random(long seed) * 成员方法 * public int nextInt() * public int nextInt(int n) * 返回一个伪随机数,他取自此随机数生成器序列、在指定范围内均匀分布的值( 0 - n-1 ) 。包含 0 ,不包含 n . * System类的概述 : System 类包含一些有用的类字段和方法。它不能被实例化。 内部方法全部是静态的,可以被直接调用,构造方法私有的。 * 在一个原文件中,不允许定义两个用 public 修饰的类 * 成员方法 * public static void gc() , 运行垃圾回收器 * public static void exit(int status) 非 0 表示异常终止,退出 jvm * public static long currentTimeMillis() 毫秒值 1秒 = 1000毫秒 * pubiic static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 数组内容的拷贝 * BigInteger的概述 : 可以让超过Integer范围内的数据进行运算,是一个不可改变的任意精度的整数 * 构造方法 : public BigInteger(String val) * 成员方法 * public BigInteger add(BigInteger val) 加法运算 * public BigInteger subtract(BigInteger val) 减法运算 * public BigInteger multiply(BigInteger val) 乘法运算 * public BigInteger divide(BigInteger val) 除法运算 * public BigInteger[] divideAndRemainder(BigInteger val) 返回一个商 , 一个余数 * BigDecimal的概述 * 由于在运算的时候,float类型和double很容易丢失精度, 所以,为了能精确的表示、计算浮点数,Java提供了 BigDecimal 是不可变的、任意精度的有符号十进制数。里面传的参数必须是字符串才可以计算出精确结果,否则一直会有小数。 * 构造方法 * public BigDecimal(String val) , 推荐构造时传入字符串参数,也可以调用 valueOf() 方法,传入数字使用。 * 成员方法 * public BigDecimal add(BigDecimal augend) * public BigDecimal subtract(BigDecimal subtrahend) * public BigDecimal multiply(BigDecimal multiplicand) * public BigDecimal divide(BigDecimal divisor) * 1970年1月1日0时 0 分 0秒 ,如果产生其他说明时区不同,是 Unix 和 C 语言的生日 。68.1 年 一个循环 , * Date类的概述 :类 Date 表示特定的瞬间,精确到毫秒。 * 构造方法 * public Date() , 不传参数代表当其时间 * public Date(long date),传 0 代表 1970 年 1月1号0是0分0秒 * 成员方法 * public long getTime() //通过时间对象,获取毫秒值 * public void setTime(long time) // 设置毫秒值,改变时间对象。 * DateFormat类的概述 * DateFormat 是日期/时间格式化子类的抽象类,不允许实例化。它以与语言无关的方式格式化并解析日期或时间。是抽象类,所以使用其子类SimpleDateFormat * SimpleDateFormat构造方法 * public SimpleDateFormat() , * public SimpleDateFormat(String pattern), 创建日期格式化类对象 * 成员方法 * public final String format(Date date) //传入 日期返回String 字符串 * public Date parse(String source) // 时间字符串转换为 Date 对象 * Calendar类的概述: Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。 * 成员方法 * public static Calendar getInstance() // 父类引用指向子类对象,获得 Clendar 一个实例 * public int get(int field) // 获取具体格式的时间 * public void add(int field,int amount) //在当期日期的前提下,加或者减去一段时间。传入的不同,加减的也不同 * public final void set(int year,int month,int date) // 修改指定字段 ------------------ 日期类上次竟然也忘了 最后修改:2018 年 07 月 17 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 哇卡哇卡