首页 文章 精选 留言 我的

精选列表

搜索[基础搭建],共10000篇文章
优秀的个人博客,低调大师

【韦玮Python分享合集】如何快速掌握Python编程基础实战?这里有你掌握Python编程世界的秘钥!

IT行业竞争激烈,淘汰迅速,随之而来的,是编程语言的不断迭代更新,程序员常有“长江后浪推前浪,前浪死在沙滩上”的感慨。然而,Python语言的教程虽然随处可见,但是忙于日常业务/学习的你或许:一直想要“找个时间学一点”,但是又不知道该从何下手?一直“没有精力”去上个培训班,或是在线啃完上百章节的视频?一直在考虑动辄上千上万的培训费用,学完是否能够升职加薪?这次,云栖社区为你请来了畅销书《精通Python网络爬虫》作者韦玮,精心打造了《Python从入门到进阶》系列课程,凭借他多年的Python实战教学经验,精准提炼出Python新手入门需要掌握的知识点,并且将实例贯穿至知识点中,让新手小白迅速掌握Python的入门要诀。本文就为各位粉丝整理了5次课程分享的精华内容,让大家一睹精彩,更多详细内容都在本文中。 演讲大咖简介:韦玮,企业家

优秀的个人博客,低调大师

java基础学习_常用类03_StringBuffer类、数组高级和Arrays类、Integer类和Character类_day13总结

==========================================================================================================================================================涉及到的知识点有:1:StringBuffer类的概述及其使用(掌握) (1)StringBuffer类的概述 (2)StringBuffer类的构造方法 (3)StringBuffer类的常见功能 (4)StringBuffer类的练习(做一遍) (5)StringBuffer类的两个面试题 (6)StringBuffer类作为形式参数的问题2:数组高级以及Arrays类的概述及其使用(掌握) (1)数组排序 A:冒泡排序 B:选择排序 (2)数组查找 A:基本查找 B:二分查找(折半查找) (3)Arrays工具类 (4)Arrays工具类的源码解析3:Integer类(掌握) (1)Integer类的概述 (2)Integer类的构造方法 (3)String引用数据类型和int基本数据类型的相互转换(推荐方法) (4)Integer类的成员方法 (5)Integer类的其他的功能(了解) (6)JDK5的新特性:自动装箱和自动拆箱 (7)Integer类的面试题4:Character类(了解) (1)Character类的概述 (2)Character类的构造方法 (3)Character类要掌握的方法 (4)Character类的案例==========================================================================================================================================================1:StringBuffer类的概述及其使用(掌握) (1)StringBuffer类的概述 我们用字符串做拼接,每次拼接,都会构建一个新的String对象,比较耗时并且也耗内存。 而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了一个字符串缓冲区类StringBuffer供我们使用。 StringBuffer:是线程安全的可变字符串(字符序列)。 线程安全(多线程讲解) 安全 --> 同步 --> 数据是安全的 不安全 --> 不同步 --> 效率高一些 安全和效率问题是永远困扰我们的问题。 要安全:医院的网站,银行网站等等。 要效率:新闻网站,论坛之类等等。 StringBuffer和String的区别? StringBuffer的长度和内容可变,String的不可变。 如果使用StringBuffer做字符串的拼接,不会浪费太多的资源。--------------------------------------- (2)StringBuffer类的构造方法 A:public StringBuffer() 无参构造方法 B:public StringBuffer(int capacity) 指定容量的字符串缓冲区对象 C:public StringBuffer(String str) 指定字符串内容的字符串缓冲区对象 D:public StringBuffer(CharSequence seq) CharSequence是接口,其所有已知实现类:CharBuffer, Segment, String, StringBuffer, StringBuilder E:StringBuffer的方法: public int capacity() 返回当前容量。 理论值 public int length() 返回长度(字符数)。 实际值--------------------------------------- (3)StringBuffer类的常见功能 A:添加功能 public StringBuffer append(String str) 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区对象本身,所以不需要再去创建对象接收了(该点很重要)。 public StringBuffer insert(int offset, String str) 在指定位置把任意类型数据插入到字符串缓冲区里面,并返回字符串缓冲区对象本身。 B:删除功能 public StringBuffer deleteCharAt(int index) 删除指定位置的字符,并返回字符串缓冲区对象本身。 public StringBuffer delete(int start, int end) 删除从指定位置开始到指定位置结束的内容,并返回字符串缓冲区对象本身(包头不包尾)。 C:替换功能 public StringBuffer replace(int start, int end, String str) 从start开始到end用str替换,并返回字符串缓冲区对象本身(包头不包尾)。 D:反转功能 public StringBuffer reverse() 反转字符串缓冲区内容,并返回字符串缓冲区对象本身。 E:截取功能(注意返回值类型不再是StringBuffer对象本身了) public String substring(int start) 从指定位置开始截取字符串,默认到末尾(包含start这个索引),返回的是字符串对象。 public String substring(int start, int end) 从指定位置开始到指定位置结束截取字符串(包括start索引但是不包end索引),返回的是字符串对象。--------------------------------------- (4)StringBuffer类的练习(做一遍) 为什么我们要讲解类之间的转换? A --> B的转换 我们把A转换为B,其实是为了使用B的功能。 B --> A的转换 我们可能要的结果是A类型,所以还得转换回来。--------------------------------------- A:String类和StringBuffer类的相互转换 String --> StringBuffer 方式1:通过StringBuffer类的构造方法(推荐) String s = "hello"; StringBuffer sb = new StringBuffer(s); 方式2:通过StringBuffer类的append()方法 String s = "hello"; StringBuffer sb2 = new StringBuffer(); sb2.append(s);--------------------------------------- StringBuffer --> String 方式1:通过String类的构造方法 StringBuffer buffer = new StringBuffer("java"); String str = new String(buffer); 方式2:通过StringBuffer类的toString()方法(推荐) StringBuffer buffer = new StringBuffer("java"); String str2 = buffer.toString();--------------------------------------- 注意:不能把字符串的值直接赋值给StringBuffer的。 StringBuffer sb = "hello"; StringBuffer sb = s;--------------------------------------- B:把数组拼接成一个字符串 示例代码如下: 1 package cn.itcast_07; 2 3 /* 4 * 把数组拼接成一个字符串 5 */ 6 public class StringBufferTest2 { 7 public static void main(String[] args) { 8 // 定义一个数组 9 int[] arr = { 44, 33, 55, 11, 22 }; 10 11 // 定义功能 12 // 方式1:用String做拼接的方式,开辟内存特别多,效率低。 13 String s1 = arrayToString(arr); 14 System.out.println("s1:" + s1); 15 16 // 方式2:用StringBuffer做拼接的方式 17 String s2 = arrayToString2(arr); 18 System.out.println("s2:" + s2); 19 } 20 21 // 用StringBuffer做拼接的方式 22 public static String arrayToString2(int[] arr) { 23 StringBuffer sb = new StringBuffer(); 24 25 sb.append("["); 26 for (int x = 0; x < arr.length; x++) { 27 if (x == arr.length - 1) { 28 sb.append(arr[x]); 29 } else { 30 sb.append(arr[x]).append(", "); 31 } 32 } 33 sb.append("]"); 34 35 return sb.toString(); // StringBuffer --> String 36 } 37 38 // 用String做拼接的方式 39 public static String arrayToString(int[] arr) { 40 String s = ""; 41 42 s += "["; 43 for (int x = 0; x < arr.length; x++) { 44 if (x == arr.length - 1) { 45 s += arr[x]; 46 } else { 47 s += arr[x]; 48 s += ", "; 49 } 50 } 51 s += "]"; 52 53 return s; 54 } 55 } C:把字符串反转 示例代码如下: 1 package cn.itcast_07; 2 3 import java.util.Scanner; 4 5 /* 6 * 把字符串反转 7 */ 8 public class StringBufferTest3 { 9 public static void main(String[] args) { 10 // 键盘录入数据 11 Scanner sc = new Scanner(System.in); 12 System.out.println("请输入数据:"); 13 String s = sc.nextLine(); 14 15 // 方式1:用String做拼接 16 String s1 = myReverse(s); 17 System.out.println("s1:" + s1); 18 // 方式2:用StringBuffer的reverse()的反转功能 19 String s2 = myReverse2(s); 20 System.out.println("s2:" + s2); 21 22 sc.close(); 23 } 24 25 // 方式2:用StringBuffer的reverse()的反转功能 26 public static String myReverse2(String s) { 27 // StringBuffer sb = new StringBuffer(s); 28 // sb.reverse(); 29 // return sb.toString(); 30 31 // 简易版 32 return new StringBuffer(s).reverse().toString(); 33 } 34 35 // 方式1:用String做拼接 36 public static String myReverse(String s) { 37 String result = ""; 38 39 char[] chs = s.toCharArray(); // 把字符串转换为字符数组 40 for (int x = chs.length - 1; x >= 0; x--) { 41 // char ch = chs[x]; // 得到每一个字符 42 // result += ch; 43 result += chs[x]; 44 } 45 46 return result; 47 } 48 } D:判断一个字符串是否是对称字符串 示例代码如下: 1 package cn.itcast_07; 2 3 import java.util.Scanner; 4 5 /* 6 * 判断一个字符串是否是对称字符串 7 * 例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串 8 * 9 * 分析: 10 * 判断一个字符串是否是对称的字符串,我只需要把 11 * 第一个和最后一个比较 12 * 第二个和倒数第二个比较 13 * ... 14 * 比较的次数是长度除以2。 15 */ 16 public class StringBufferTest4 { 17 public static void main(String[] args) { 18 // 创建键盘录入对象 19 Scanner sc = new Scanner(System.in); 20 System.out.println("请输入一个字符串:"); 21 String s = sc.nextLine(); 22 23 // 一个一个的比较 24 boolean b = isSame(s); 25 System.out.println("b:" + b); 26 27 // 用字符串缓冲区的反转功能 28 boolean b2 = isSame2(s); 29 System.out.println("b2:"+b2); 30 31 sc.close(); 32 } 33 34 public static boolean isSame2(String s) { 35 return new StringBuffer(s).reverse().toString().equals(s); 36 } 37 38 39 // public static boolean isSame(String s) { 40 // // 把字符串转成字符数组 41 // char[] chs = s.toCharArray(); 42 // 43 // for (int start = 0, end = chs.length - 1; start <= end; start++, end--) { 44 // if (chs[start] != chs[end]) { 45 // return false; 46 // } 47 // } 48 // 49 // return true; 50 // } 51 52 public static boolean isSame(String s) { 53 boolean flag = true; 54 55 // 把字符串转成字符数组 56 char[] chs = s.toCharArray(); 57 for (int start = 0, end = chs.length - 1; start <= end; start++, end--) { 58 if (chs[start] != chs[end]) { 59 flag = false; 60 break; 61 } 62 } 63 64 return flag; 65 } 66 67 } --------------------------------------- (5)StringBuffer类的两个面试题 小细节: StringBuffer 同步的,数据安全,效率低。 StringBuilder 不同步的,数据不安全,效率高。 StringBuilder是一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。 该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。 A:String、StringBuffer、StringBuilder的区别? a:String是内容不可变的,而StringBuffer、StringBuilder都是内容可变的。 b:StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高。 B:StringBuffer和数组的区别? 二者都可以看出是一个容器,装其他的数据。 但是呢,StringBuffer可以放置多种数据,但最终是一个字符串数据。 而数组可以放置多种数据,但必须是同一种数据类型的。 (6)StringBuffer类作为形式参数的问题: String类作为形式参数。 StringBuffer类作为形式参数。 形式参数: 基本数据类型:形式参数的改变不影响实际参数。 引用数据类型:形式参数的改变直接影响实际参数。 String类作为形式参数传递时,效果和基本数据类型作为形式参数传递是一样的。 示例代码如下: 1 package cn.itcast_08; 2 3 /* 4 * 面试题: 5 * 1:String、StringBuffer、StringBuilder的区别? 6 * A:String是内容不可变的,而StringBuffer、StringBuilder都是内容可变的。 7 * B:StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高。 8 * 9 * 2:StringBuffer和数组的区别? 10 * 二者都可以看出是一个容器,装其他的数据。 11 * 但是呢,StringBuffer可以放置多种数据,但最终是一个字符串数据。 12 * 而数组可以放置多种数据,但必须是同一种数据类型的。 13 * 14 * 3:形式参数问题 15 * String类作为参数传递 16 * StringBuffer类作为参数传递 17 * 18 * 形式参数: 19 * 基本数据类型:形式参数的改变不影响实际参数。 20 * 引用数据类型:形式参数的改变直接影响实际参数。 21 * 22 * 注意: 23 * String类作为形式参数传递时,效果和基本数据类型作为形式参数传递是一样的。 24 */ 25 public class StringBufferDemo { 26 public static void main(String[] args) { 27 String s1 = "hello"; 28 String s2 = "world"; 29 System.out.println(s1 + "---" + s2); // hello---world 30 change(s1, s2); 31 System.out.println(s1 + "---" + s2); // hello---world 32 33 StringBuffer sb1 = new StringBuffer("hello"); 34 StringBuffer sb2 = new StringBuffer("world"); 35 System.out.println(sb1 + "---" + sb2); // hello---world 36 change(sb1, sb2); 37 System.out.println(sb1 + "---" + sb2); // hello---worldworld 38 } 39 40 public static void change(StringBuffer sb1, StringBuffer sb2) { 41 sb1 = sb2; // sb1的地址值由于赋值临时发生改变,但在main函数里面的sb1的地址值没有变。 42 sb2.append(sb1); // append函数使sb2的内容发生改变,但在main函数里面的sb2的地址值没有变。即通过change函数里面的append函数sb2指向的内容发生改变。 43 } 44 45 public static void change(String s1, String s2) { 46 s1 = s2; // sb1的地址值由于赋值临时发生改变,但在main函数里面的sb1的地址值没有变。 47 s2 = s1 + s2; // sb2的地址值由于赋值临时发生改变,但在main函数里面的sb2的地址值没有变。 48 } 49 } ----------------------------------------------------------------------------- 2:数组高级以及Arrays类的概述及其使用(掌握) (1)数组排序 A:冒泡排序 相邻元素两两比较,大的往后放,第一次比较完毕,最大值出现在了最大索引处。同理,其他的元素就可以排好。01_数组冒泡排序原理图解如下图所示: public static void bubbleSort(int[] arr) { for (int x = 0; x < arr.length - 1 ; x++) { for (int y = 0; y < arr.length - 1 - x; y++) { if (arr[y] > arr[y+1]) { int temp = arr[y]; arr[y] = arr[y+1]; arr[y+1] = temp; } } } } B:选择排序 把0索引的元素,依次和后面的元素进行比较,小的往前放,第一次比较完毕,最小值出现在了0索引。同理,其他的元素就可以排好。02_数组选择排序原理图解如下图所示: public static void selectSort(int[] arr) { for (int x = 0; x < arr.length - 1; x++) { for (int y = x + 1; y < arr.length; y++) { if (arr[y] < arr[x]) { int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } } } 练习:把字符串中的字符进行排序。 示例代码如下: 1 package cn.itcast_03; 2 3 /* 4 * 把字符串中的字符进行排序。 5 * 举例:"dacgebf" 6 * 结果:"abcdefg" 7 * 8 * 分析: 9 * A:定义一个字符串 10 * B:把字符串转换为字符数组 11 * C:把字符数组进行排序 12 * D:把排序后的字符数组转成字符串 13 * E:输出最后的字符串 14 */ 15 public class ArrayTest { 16 public static void main(String[] args) { 17 // 定义一个字符串 18 String s = "dacgebf"; 19 20 // 把字符串转换为字符数组 21 char[] chs = s.toCharArray(); 22 23 // 把字符数组进行排序 24 bubbleSort(chs); 25 26 // 把排序后的字符数组转成字符串 27 String result = String.valueOf(chs); 28 29 // 输出最后的字符串 30 System.out.println("result:"+result); 31 } 32 33 // 冒泡排序 34 public static void bubbleSort(char[] chs) { 35 for (int x = 0; x < chs.length - 1; x++) { 36 for (int y = 0; y < chs.length - 1 - x; y++) { 37 if (chs[y] > chs[y + 1]) { 38 char temp = chs[y]; 39 chs[y] = chs[y + 1]; 40 chs[y + 1] = temp; 41 } 42 } 43 } 44 } 45 } --------------------------------------- (2)数组查找 A:基本查找 针对数组无序的情况 public static int getIndex(int[] arr, int value) { int index = -1; for (int x = 0; x < arr.length; x++) { if (arr[x] == value) { index = x; break; } } return index; } B:二分查找(折半查找) 针对数组有序的情况(千万不要先将无须数组排序,再查找,无序数组就用基本查找法) A:定义最大索引,最小索引; B:计算出中间索引; C:拿中间索引的值和要查找的值进行比较: 相等:就返回当前的中间索引。 不相等: 大 左边找 小 右边找 D:重新计算出中间索引: 大 左边找 max = mid - 1; 小 右边找 min = mid + 1; E:回到B。 public static int binarySearch(int[] arr, int value) { int min = 0; int max = arr.length - 1; int mid = (min + max) / 2; while (arr[mid] != value) { if (arr[mid] > value) { max = mid - 1; } else if (arr[mid] < value) { min = mid + 1; } if (min > max) { return -1; } mid = (min+max) / 2; } return mid; } --------------------------------------- (3)Arrays工具类 A:是针对数组进行操作的工具类。包括排序和查找等功能(注意:该类没有构造方法,都是静态的方法,通过类名调用。) B:要掌握的方法(自己补齐方法) 1:public static String toString(int[] a) 把数组转成字符串(数组可以是任何类型的数组哦) 2:public static void sort(int[] a) 对数组进行排序 3:public static int binarySearch(int[] a, int key) 二分查找 (4)Arrays工具类的源码解析 Arrays类的底层排序方法是快速排序。 能用JDK提供的就不用自己写的,因为JDK提供的会做很多优化。--------------------------------------- --------------------------------------- public static String toString(int[] a) public static void sort(int[] a) 底层是快速排序,知道就可以了。有空看,有问题再问我。 public static int binarySearch(int[] a,int key) 开发原则: 只要是形参是对象,我们就要首先判断该对象是否为null。 也即只要是形参是引用数据类型,我们就要首先判断该数据类型是否为null。 --------------------------------------- int[] arr = { 24, 69, 80, 57, 13 }; System.out.println("排序前:" + Arrays.toString(arr)); public static String toString(int[] a) { //a --> arr --> { 24, 69, 80, 57, 13 } if (a == null) return "null"; // 说明数组对象不存在。 int iMax = a.length - 1; // iMax = 5 - 1 = 4; if (iMax == -1) return "[]"; // 说明数组存在,但是没有元素。 StringBuilder b = new StringBuilder(); b.append('['); // "[" for (int i = 0; ; i++) { // 第二个条件不写,默认为true。 b.append(a[i]); // "[24, 69, 80, 57, 13" if (i == iMax) return b.append(']').toString(); // "[24, 69, 80, 57, 13]" b.append(", "); // "[24, 69, 80, 57, " } } --------------------------------------- int[] arr = { 13, 24, 57, 69, 80 }; System.out.println("binarySearch:" + Arrays.binarySearch(arr, 577)); public static int binarySearch(int[] a, int key) { // a --> arr --> { 13, 24, 57, 69, 80 } // key --> 577 return binarySearch0(a, 0, a.length, key); } private static int binarySearch0(int[] a, int fromIndex, int toIndex, int key) { // a --> arr --> { 13, 24, 57, 69, 80 } // fromIndex --> 0 // toIndex --> 5 // key --> 577 int low = fromIndex; // low=0 int high = toIndex - 1; // high=4 while (low <= high) { // 无符号右移一位,相当于除以2。 int mid = (low + high) >>> 1; // mid=2,mid=3,mid=4 int midVal = a[mid]; // midVal=57,midVal=69,midVal=80 if (midVal < key) low = mid + 1; // low=3,low=4,low=5 else if (midVal > key) high = mid - 1; else return mid; // key found } return -(low + 1); // key not found. } --------------------------------------- -----------------------------------------------------------------------------3:Integer类(掌握) (1)Integer类的概述 为了对基本数据类型进行更多的操作,更方便的操作,Java就针对每一种基本数据类型提供了对应的类类型。包装类类型。 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据。 简言之:只有我们把某个东西看成一个类的时候,我们使用这个东西的功能和属性的时候就特别方便。 常用的操作之一:用于基本数据类型与字符串之间的转换。 基本数据类型 引用数据类型 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean --------------------------------------- (2)Integer类的构造方法 public Integer(int value) Integer i = new Integer(100); 很少使用这个构造函数。 静态工厂valueOf(int)通常是一个更好的选择,因为它可能产生明显更好的空间和时间性能。 public Integer(String s) Integer i = new Integer("100"); 很少使用这个构造函数。 使用parseInt(String)将字符串转换为int原语,或使用valueOf(String)将字符串转换为Integer对象。 注意:这里的字符串必须是由数字字符组成的。--------------------------------------- (3)String引用数据类型和int基本数据类型的相互转换(推荐方法) A:String --> int Integer.parseInt("100"); B:int --> String String.valueOf(100); 示例代码如下: 1 package cn.itcast_03; 2 3 /* 4 * String引用数据类型和int基本数据类型的相互转换 5 * 6 * int --> String 7 * String.valueOf(number) 8 * 9 * String --> int 10 * Integer.parseInt(s) 11 */ 12 public class IntegerDemo { 13 public static void main(String[] args) { 14 // int --> String 15 int number = 100; 16 // 方式1:字符串的拼接 17 String s1 = "" + number; 18 System.out.println("s1:" + s1); 19 // 方式2:String类的valueof方法 20 String s2 = String.valueOf(number); 21 System.out.println("s2:" + s2); 22 // 方式3:通过Integer作为桥梁 23 // int --> Integer --> String 24 Integer i = new Integer(number); 25 String s3 = i.toString(); 26 System.out.println("s3:" + s3); 27 // 方式4:Integer类的toString方法 28 // public static String toString(int i) 29 String s4 = Integer.toString(number); 30 System.out.println("s4:" + s4); 31 System.out.println("-----------------"); 32 33 // String --> int 34 String s = "100"; 35 // 方式1:通过Integer作为桥梁 36 // String --> Integer --> int 37 Integer ii = new Integer(s); 38 // public int intValue() 39 int x = ii.intValue(); 40 System.out.println("x:" + x); 41 // 方式2:Integer类的parseInt方法 42 // public static int parseInt(String s) 43 int y = Integer.parseInt(s); 44 System.out.println("y:"+y); 45 } 46 } --------------------------------------- (4)Integer类的成员方法 public int intValue() public static int parseInt(String s) public static String toString(int i) public static Integer valueOf(int i) public static Integer valueOf(String s)--------------------------------------- (5)Integer类的其他的功能(了解) 常用的基本进制转换:十进制到二进制、八进制、十六进制 public static String toBinaryString(int i) public static String toOctalString(int i) public static String toHexString(int i) 十进制到其他进制 public static String toString(int i, int radix) 进制的范围:2-36 为什么呢?0,...9,a...z 其他进制到十进制 public static int parseInt(String s, int radix) 示例代码如下: 1 package cn.itcast_04; 2 3 /* 4 * 常用的基本进制转换 5 * public static String toBinaryString(int i) 6 * public static String toOctalString(int i) 7 * public static String toHexString(int i) 8 * 9 * 十进制到其他进制 10 * public static String toString(int i, int radix) 11 * 由这个我们也看到了进制的范围:2-36 12 * 为什么呢?0,...9,a...z 13 * 14 * 其他进制到十进制 15 * public static int parseInt(String s, int radix) 16 */ 17 public class IntegerDemo { 18 public static void main(String[] args) { 19 // 十进制到二进制、八进制、十六进制 20 System.out.println(Integer.toBinaryString(100)); //1100100 21 System.out.println(Integer.toOctalString(100)); //144 22 System.out.println(Integer.toHexString(100)); //64 23 System.out.println("-------------------------"); 24 25 // 十进制到其他进制 26 System.out.println(Integer.toString(100, 10)); // 100 27 System.out.println(Integer.toString(100, 2)); // 1100100 28 System.out.println(Integer.toString(100, 8)); // 144 29 System.out.println(Integer.toString(100, 16)); // 64 30 System.out.println(Integer.toString(100, 5)); // 400 31 System.out.println(Integer.toString(100, 7)); // 202 32 System.out.println(Integer.toString(100, -7)); // 100 33 System.out.println(Integer.toString(100, 70)); // 100 34 System.out.println(Integer.toString(100, 1)); // 100 35 System.out.println(Integer.toString(100, 17)); // 5f 36 System.out.println(Integer.toString(100, 32)); // 34 37 System.out.println(Integer.toString(100, 37)); // 100 38 System.out.println(Integer.toString(100, 36)); // 2s 39 System.out.println("-----------------------"); 40 41 // 其他进制到十进制 42 System.out.println(Integer.parseInt("100", 10)); // 100 43 System.out.println(Integer.parseInt("100", 2)); // 4 44 System.out.println(Integer.parseInt("100", 8)); // 64 45 System.out.println(Integer.parseInt("100", 16)); // 256 46 System.out.println(Integer.parseInt("100", 23)); // 529 47 // NumberFormatException 48 // System.out.println(Integer.parseInt("123", 2)); 49 } 50 } --------------------------------------- (6)JDK5的新特性:自动装箱和自动拆箱 自动装箱:把基本数据类型转换为包装类数据类型。 自动拆箱:把包装类数据类型转换为基本数据类型。 把下面的这个代码理解即可: Integer i = 100; i += 200; System.out.println("ii:" + ii); // 上面三句,通过反编译后的代码如下: // Integer ii = Integer.valueOf(100); // 自动装箱 // ii = Integer.valueOf(ii.intValue() + 200); // 自动拆箱,再自动装箱 // System.out.println((new StringBuilder("ii:")).append(ii).toString()); 示例代码如下: package cn.itcast_05; /* * JDK5的新特性: * 自动装箱:把基本数据类型转换为包装类数据类型。 * 自动拆箱:把包装类数据类型转换为基本数据类型。 * * 注意一个小问题: * 在使用时,Integer x = null; 代码就会出现NullPointerException。 * 在使用Integer类的对象的时候,建议先判断该对象是否为null,然后再使用。 */ public class IntegerDemo { public static void main(String[] args) { // 定义了一个int类型的包装类类型变量i // Integer i = new Integer(100); // 等价于下面这句 Integer ii = 100; ii += 200; System.out.println("ii:" + ii); // 通过反编译后的代码 // Integer ii = Integer.valueOf(100); // 自动装箱 // ii = Integer.valueOf(ii.intValue() + 200); // 自动拆箱,再自动装箱 // System.out.println((new StringBuilder("ii:")).append(ii).toString()); /* Integer iii = null; // NullPointerException 因为通过反编译可以知道,iii是对象要调用方法,但iii是空指针。 if (iii != null) { iii += 1000; System.out.println(iii); } */ } } --------------------------------------- (7)Integer类的面试题 byte常量池,即-128到127之间的数据缓冲池问题。 这句 Integer i = 100; 等价于 Integer ii = Integer.valueOf(100); // 自动装箱 通过查看valueOf方法的源码,我们就知道了,当Integer类型的数据直接赋值时,如果在-128到127之间,会直接从缓冲池里获取数据,每次并不创建新的空间。-----------------------------------------------------------------------------4:Character类(了解) (1)Character类的概述 Character 类在对象中包装一个基本类型 char 的值 此外,该类提供了几种方法,以确定字符的类别(小写字母,数字,等等),并将字符从大写转换成小写,反之亦然。 (2)Character类的构造方法 Character ch = new Character('a'); 很少使用这个构造函数。 静态工厂valueOf(char)通常是一个更好的选择,因为它可能产生明显更好的空间和时间性能。 (3)Character类要掌握的方法:(自己补齐) public static boolean isUpperCase(char ch) 判断给定的字符是否是大写字符 public static boolean isLowerCase(char ch) 判断给定的字符是否是小写字符 public static boolean isDigit(char ch) 判断给定的字符是否是数字字符 public static char toUpperCase(char ch) 把给定的字符转换为大写字符 public static char toLowerCase(char ch) 把给定的字符转换为小写字符 (4)Character类的案例: 统计字符串中大写、小写及数字字符出现的次数。 示例代码如下: 1 package cn.itcast_06; 2 3 /* 4 * 看程序写结果 5 * 6 * 注意:当Integer类型的数据直接赋值时,如果在-128到127之间,会直接从缓冲池里获取数据,每次并不创建新的空间。 7 */ 8 public class IntegerDemo { 9 public static void main(String[] args) { 10 Integer i1 = new Integer(127); 11 Integer i2 = new Integer(127); 12 System.out.println(i1 == i2); // false 13 System.out.println(i1.equals(i2)); // true 14 System.out.println("-----------"); 15 16 Integer i3 = new Integer(128); 17 Integer i4 = new Integer(128); 18 System.out.println(i3 == i4); // false 19 System.out.println(i3.equals(i4)); // true 20 System.out.println("-----------"); 21 22 // JDK5的新特性 23 Integer i5 = 128; 24 Integer i6 = 128; 25 System.out.println(i5 == i6); // false 重新new出来的。 26 System.out.println(i5.equals(i6)); // true 27 System.out.println("-----------"); 28 29 Integer i7 = 127; 30 Integer i8 = 127; 31 System.out.println(i7 == i8); // true 缓冲池中来的(byte常量池)。 32 System.out.println(i7.equals(i8)); // true 33 34 // 通过查看源码,我们就知道了,针对-128到127之间的数据,做了一个数据缓冲池,如果数据是该范围内的,则每次并不创建新的空间。 35 // Integer ii = Integer.valueOf(127); 36 } 37 } =============================================================================我的GitHub地址: https://github.com/heizemingjun 我的博客园地址: http://www.cnblogs.com/chenmingjun 我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun Copyright ©2018 黑泽明军 【转载文章务必保留出处和署名,谢谢!】

优秀的个人博客,低调大师

Java基础语法(十一)类?对象?我能不能写个妹子类给自己造个(一个够吗?)对象?

文章目录 前言 类 自定义女孩类 女孩的属性 女孩的动作 结语 前言 首先声明,本人并不是什么大佬,也是一个初入IT界的小白,我们一起加油学习! 这次可以学习自定义类和对象的知识了,让我们先去了解什么是对象,什么是类 造妹计划:造一个妹子类,自己定义一个完美的对象! 类 那么什么是类呢?类,分门别类的类,类别的类,人“类”就是我们现实生活中的一个类,而每一个人就是一个对象。 对象就是特殊个体,类就是一般个体,可能还是不那么好理解,我就再详细点 “我认识一个叫做丸子的女孩”——这句话中,丸子就是对象,代表一个真正的人,具体的人;而女孩就是类,代表一个抽象的东西,一个笼盖所有女孩的类别。 自定义女孩类 把具有相同特征的一些东西/事物分门别类,我们自己造一个名字 好,我们现在造一个火柴盒妹子类,用比较艺术化的话来说就是:只具其形,不具其神! classGirl{} 好了,这就是我们的女孩类,是不是感觉啥都没有,不对不对,Java类中有一个默认的东西,叫做构造方法,构造方法,构造方法,重要的事情说三遍! 构造方法:实例化对象时,自动调用,默认会存在一个无参数的构造方法 无参构造方法:默认构造方法,只用于创建实例化对象,无法接受参数 publicclassEc4_19{publicstaticvoidmain(String[]args){Girlgirl=newGirl();System.out.println(girl);//Girl@4517d9a3,返回的是内存地址}}classGirl{} 有参构造方法:Java类中可以创建多个构造函数,但是参数和返回类型不能相同,这种情况叫做重载,意思就是你可以创建很多个构造函数 publicclassEc4_19{publicstaticvoidmain(String[]args){Girlgirl=newGirl();Girlgirl1=newGirl("Jecy");}}classGirl{Girl(Stringname){System.out.println("有参构造函数"+""+name);}Girl(){System.out.println("无参构造函数");}}/* 输出结果为: 无参构造函数 有参构造函数Jecy */ 应该已经了解构造函数了吧,啊,这个实在想不出来什么骚话来形容~~ 女孩的属性 类中有属性,分为成员变量,局部变量和类变量 在我们创建的女孩类中,属性就是女孩们的诸如身材,相貌等的东西,当然,像什么年龄名字的,也是必须有的,不过不同的属性有不同的作用,所以属性也分上面三种 成员变量 在类中,方法外定义,在实例化对象时创建,并可以被实例化对象拿去用(赋值,修改),不多说,看代码 publicclassEc4_19{publicstaticvoidmain(String[]args){Girlgirl=newGirl();//实例化对象girl.age=10;//调用设置成员变量值girl.name="Jeccy";//调用设置成员变量值System.out.printf("%s今年%d岁了",girl.name,girl.age);}}classGirl{publicintage;publicStringname;}/* 输出结果为: Jeccy今年10岁了 */ 局部变量 在方法中定义,作用于在定义的方法中,也就是说只在该方法中能够使用,比如在构造方法中的变量,就无法通过实例化的对象调用 publicclassEc4_19{publicstaticvoidmain(String[]args){Girlgirl=newGirl(10,"Jeccy");//用有参构造方法实例化对象System.out.printf("%s今年%d岁了",girl.name,girl.age);}}classGirl{publicintage;//成员变量publicStringname;//成员变量Girl(inta,Stringn){age=a;//局部变量,无法通过实例化对象直接调用name=n;//局部变量}}/* 输出结果为: Jeccy今年10岁了 */ 类变量 需要通过static修饰符修饰,可以直接通过类名调用 publicclassEc4_19{publicstaticvoidmain(String[]args){Girl.name="西施";Girl.age=10;System.out.printf("%s今年%d岁了",Girl.name,Girl.age);}}classGirl{publicstaticintage;publicstaticStringname;}/* 运行结果: 西施今年10岁了 */ 私有属性 无法被外界访问的属性,就是私有属性,就像女孩们有些东西不会被别人知道一样(比如三围之类的啦) publicclassEc4_19{publicstaticvoidmain(String[]args){Girl.name="西施";Girl.age=10;System.out.printf("%s今年%d岁了",Girl.name,Girl.age);}}classGirl{privatestaticintage;privatestaticStringname;}/* 这样写,就算是定义的静态方法,但是因为是私有的,也无法被访问 运行会报错 */ 女孩的动作 行为就是方法,一般来说,Java类的规范写法是为每个属性设置一个setXxx方法,一个getXxx方法,并且将每个属性设为私有方法 就像这样:这是一般的规范写法 publicclassEc4_19{publicstaticvoidmain(String[]args){Girlgirl=newGirl();girl.setAge(10);girl.setName("Jerry");System.out.printf("%s今年%d岁了",girl.getName(),girl.getAge());}}classGirl{privateintage;privateStringname;voidsetName(Stringname){this.name=name;}StringgetName(){returnname;}voidsetAge(intage){this.age=age;}intgetAge(){returnage;}} 当然,也有别的普通的方法,比如妹子会撒娇,会打游戏之类的 publicclassEc4_19{publicstaticvoidmain(String[]args){Girlgirl=newGirl();girl.setAge(10);girl.setName("Jerry");girl.playGame();System.out.println("");girl.coqutry();System.out.printf("%s今年%d岁了",girl.getName(),girl.getAge());}}classGirl{privateintage;privateStringname;voidsetName(Stringname){this.name=name;}StringgetName(){returnname;}voidsetAge(intage){this.age=age;}intgetAge(){returnage;}voidplayGame(){System.out.printf("%s打游戏很厉害",name);}voidcoqutry(){System.out.println("哥哥不要这样啦,人家害怕啦~~~");}}/* 运行结果: Jerry打游戏很厉害 哥哥不要这样啦,人家害怕啦~~~ Jerry今年10岁了 */ 结语 好了,今天到这里就结束了,我们的造妹行动也算是跨出了从零到有这一突破性的一步!!!喝彩~~ 例子中的年龄有点不好,那可是三年起步啊,不行不行,以后不能再这样了! giao辞了,xdm

优秀的个人博客,低调大师

java基础学习_常用类04_正则表达式、Math类、Random类、System类、BigInteger类、BigDecimal类、Dat...

==========================================================================================================================================================涉及到的知识点有:1:正则表达式(理解) (1)正则表达式的概述 (2)常见规则 (3)常见功能:(分别用的是那个类的功能呢?) (4)正则表达式的使用案例2:Math类的概述及其成员方法(掌握) (1)Math类的概述 (2)Math类的成员变量(字段) (3)Math类的成员方法 (4)Math类的案例3:Random类的概述及其构造方法(理解) (1)Random类的概述 (2)Random类的构造方法 (3)Random类的成员方法4:System类的概述及其成员方法(掌握) (1)System类的概述 (2)System类的成员方法(自己补齐)5:BigInteger类的概述及其构造方法和成员方法(理解) (1)BigInteger类的概述 (2)BigInteger类的构造方法(有6个) (3)BigInteger类的成员方法6:BigDecimal类的概述及其构造方法(理解) (1)BigDecimal类的概述 (2)BigDecimal类的构造方法(有16个) (3)BigDecimal类的成员方法7:Date类和DateFormat类的概述及其方法(掌握) (1)Date类的概述(JDK1.1就出现了,之后使用Calendar类) (2)Date类的构造方法、成员方法和小案例 (3)DateFormat类的概述(抽象类) (4)SimpleDateFormat类的构造方法(具体类) (5)DateFormat类的成员方法(抽象类) (6)DateFormat类的案例8:Calendar类的概述及其方法(掌握) (1)Calendar类的概述(抽象类) (2)因为Calendar类是抽象类,那么如何得到一个日历对象呢? (3)Calendar类的成员方法(抽象类) (4)Calendar类的案例==========================================================================================================================================================1:正则表达式(理解) (1)正则表达式的概述 就是符合一定规则的字符串。 (2)常见规则 A:字符 x 字符 x。举例:'a'表示字符a \\ \ 两个反斜杠字符代表一个反斜杠字符 \n 新行(换行)符 ('\u000A') \r 回车符 ('\u000D') B:字符类 [abc] a、b或 c(简单类) 例如:[38] 表示3或者8 [^abc] 任何字符,除了a、b或 c(否定) [a-zA-Z] a到z或 A到Z,两头的字母包括在内(范围) [0-9] 0到9,两头的数字包括在内(范围) C:预定义字符类 . 任何字符。我的就是.字符本身,怎么表示呢? \. \. .字符本身 \\ \ 两个反斜杠字符代表一个反斜杠字符 \d 数字:[0-9] \D 非数字:[^0-9] \w 单词字符:[a-zA-Z_0-9](在正则表达式里面组成单词的东西必须由这些东西组成。) D:边界匹配器 ^ 行的开头 $ 行的结尾 \b 单词边界(不是单词字符的地方。举例:hello world?haha;xixi 例子中:空格、?、;就是单词边界。) E:Greedy 数量词 X X出现一次(X后面什么也没有) X? X出现一次或一次也没有 X* X出现零次或多次 X+ X出现一次或多次 X{n} X出现恰好 n 次 X{n,} X出现至少 n 次 X{n,m} X出现至少 n 次,但是不超过 m 次 例如: [1-9][0-9]{4,14} [1-9]出现一次[0-9]出现至少4次,但是不超过14次。 --------------------------------------- (3)常见功能:(分别用的是那个类的功能呢?) A:判断功能 String类的public boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式 B:分割功能 String类的public String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串 C:替换功能 String类的public String replaceAll(String regex,String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串 D:获取功能 Pattern类和Matcher类的使用 模式和匹配器的典型调用顺序如下:(基本使用顺序) // 把正则表达式编译成模式对象 Pattern p = Pattern.compile("a*b"); // 通过模式对象得到匹配器对象,这个时候需要的是被匹配的字符串 Matcher m = p.matcher("aaaaab"); // 调用匹配器对象的匹配功能 boolean b = m.matches(); // 注意:一定要先调find(),然后才能调group() Matcher类的方法:public boolean find() 查找有没有满足条件的子串 Matcher类的方法:public String group() 返回由以前匹配操作所匹配的输入子序列 --------------------------------------- (4)正则表达式的使用案例 A:判断电话号码和邮箱 示例代码如下: 1 package cn.itcast_02; 2 3 import java.util.Scanner; 4 5 /* 6 * 校验邮箱 7 * 8 * 分析: 9 * A:键盘录入邮箱 10 * B:定义邮箱的规则 11 * 1517806580@qq.com 12 * liuyi@163.com 13 * linqingxia@126.com 14 * fengqingyang@sina.com.cn 15 * fqy@itcast.cn 16 * C:调用功能,判断即可 17 * D:输出结果 18 */ 19 public class RegexTest { 20 public static void main(String[] args) { 21 //键盘录入邮箱 22 Scanner sc = new Scanner(System.in); 23 System.out.println("请输入邮箱:"); 24 String email = sc.nextLine(); 25 26 //定义邮箱的规则 27 //String regex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]{2,3})+"; 28 String regex = "\\w+@\\w{2,6}(\\.\\w{2,3})+"; 29 30 //调用功能,判断即可 31 boolean flag = email.matches(regex); 32 33 //输出结果 34 System.out.println("flag:"+flag); 35 } 36 } View Code B:按照不同的规则分割数据 示例代码如下: 1 package cn.itcast_03; 2 3 import java.util.Arrays; 4 5 /* 6 * 我有如下一个字符串:"91 27 46 38 50" 7 * 请写代码实现最终输出结果是:"27 38 46 50 91" 8 * 9 * 分析: 10 * A:定义一个字符串 11 * B:把字符串进行分割,得到一个字符串数组 12 * C:把字符串数组变换成int数组 13 * D:对int数组排序 14 * E:把排序后的int数组再组装成一个字符串 15 * F:输出字符串 16 */ 17 public class RegexTest { 18 public static void main(String[] args) { 19 // 定义一个字符串 20 String s = "91 27 46 38 50"; 21 22 // 把字符串进行分割,得到一个字符串数组 23 String[] strArray = s.split(" "); 24 25 // 把字符串数组变换成int数组 26 int[] arr = new int[strArray.length]; 27 28 for (int x = 0; x < arr.length; x++) { 29 arr[x] = Integer.parseInt(strArray[x]); 30 } 31 32 // 对int数组排序 33 Arrays.sort(arr); 34 35 // 把排序后的int数组在组装成一个字符串缓冲区数组 36 // 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区对象本身,所以不需要再去创建对象接收了(该点很重要)。 37 StringBuilder sb = new StringBuilder(); 38 for (int x = 0; x < arr.length; x++) { 39 sb.append(arr[x]).append(" "); 40 } 41 // 把字符串缓冲区数组转化为字符串,并去除前后端空格 trim() 42 String result = sb.toString().trim(); 43 44 // 输出字符串 45 System.out.println("result:"+result); 46 } 47 } View Code C:把论坛中的数字替换为* 示例代码如下: 1 package cn.itcast_04; 2 3 /* 4 * 替换功能 5 * String类的public String replaceAll(String regex, String replacement) 6 * 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 7 */ 8 public class RegexDemo { 9 public static void main(String[] args) { 10 // 定义一个字符串 11 String s = "helloqq12345worldkh622112345678java"; 12 13 // 我要去除所有的数字,用*给替换掉 14 // String regex = "\\d+"; 15 // String regex = "\\d"; 16 // String ss = "*"; 17 18 // 直接把数字干掉 19 String regex = "\\d+"; 20 String ss = ""; 21 22 String result = s.replaceAll(regex, ss); 23 System.out.println(result); // helloqqworldkhjava 24 } 25 } View Code D:获取字符串中由3个字符组成的单词 示例代码如下: 1 package cn.itcast_05; 2 3 import java.util.regex.Matcher; 4 import java.util.regex.Pattern; 5 6 /* 7 * 获取功能: 8 * 获取下面这个字符串中由三个字符组成的单词 9 * da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu? 10 */ 11 public class RegexDemo2 { 12 public static void main(String[] args) { 13 // 定义字符串 14 String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?"; 15 // 规则 16 String regex = "\\b\\w{3}\\b"; 17 18 // 把规则编译成模式对象 19 Pattern p = Pattern.compile(regex); 20 // 通过模式对象得到匹配器对象 21 Matcher m = p.matcher(s); 22 // 调用匹配器对象的功能 23 // Matcher类的方法:public boolean find() 查找有没有满足条件的子串 24 // boolean flag = m.find(); 25 // System.out.println(flag); 26 27 // 如何或获取值呢? 28 // Matcher类的方法:public String group() 返回由以前匹配操作所匹配的输入子序列 29 // String ss = m.group(); 30 // System.out.println(ss); 31 32 // 再来一次 33 // 判断有没有 34 // flag = m.find(); 35 // System.out.println(flag); 36 // 获取值 37 // ss = m.group(); 38 // System.out.println(ss); 39 40 while (m.find()) { 41 System.out.println(m.group()); 42 } 43 44 // 注意:一定要先调find(),然后才能调group() 45 // 若直接group(),会抛出异常 46 // IllegalStateException: No match found 47 // String ss = m.group(); 48 // System.out.println(ss); 49 } 50 } View Code ----------------------------------------------------------------------------- 2:Math类的概述及其成员方法(掌握) (1)Math类的概述 Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。 (2)Math类的成员变量(字段) public static final double PI = 3.14159265358979323846; public static final double E = 2.7182818284590452354; (3)Math类的成员方法 public static int abs(int a) 绝对值(形参的数据类型可以为:int、double、float、long) 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) a的b次幂 public static double random() 随机数 [0.0,1.0) public static int round(float a) 四舍五入(参数为double的自学) public static double sqrt(double a) 正平方根 (4)Math类的案例 A:猜数字小游戏 B:获取任意范围的随机数 1 package cn.itcast_02; 2 3 import java.util.Scanner; 4 5 /* 6 * 需求:请设计一个方法,可以实现获取任意范围内的随机数。 7 * 8 * 分析: 9 * A:键盘录入两个数据; 10 * int strat; 11 * int end; 12 * B:想办法获取在start到end之间的随机数; 13 * 我写一个功能实现这个效果,得到一个随机数。(int) 14 * C:输出这个随机数。 15 */ 16 public class MathDemo { 17 public static void main(String[] args) { 18 Scanner sc = new Scanner(System.in); 19 System.out.println("请输入开始数:"); 20 int start = sc.nextInt(); 21 System.out.println("请输入结束数:"); 22 int end = sc.nextInt(); 23 24 for (int x = 0; x < 100; x++) { 25 // 调用功能 26 int num = getRandom(start, end); 27 // 输出结果 28 System.out.println(num); 29 } 30 } 31 32 /* 33 * 写一个功能 两个明确: 34 * 返回值类型:int 35 * 参数列表:int start, int end 36 */ 37 public static int getRandom(int start, int end) { 38 // 回想我们讲过的1-100之间的随机数 39 // int number = (int) (Math.random() * 100) + 1; 40 // int number = (int) (Math.random() * end) + start; 41 // 发现有问题了,怎么办呢? 42 int number = (int) (Math.random() * (end - start + 1)) + start; 43 return number; 44 } 45 } View Code ----------------------------------------------------------------------------- 3:Random类的概述及其构造方法(理解) (1)Random类的概述 用于产生随机数的类。 (2)Random类的构造方法 A:public Random() 没有给种子,用的是默认种子,是当前时间的毫秒值,随机数不相同 B:public Random(long seed) 给出指定的种子,每次种子相同,随机数就相同 (3)Random类的成员方法 A:public int nextInt() 返回的是int范围内的随机数 B:public int nextInt(int n) 返回的是[0,n)范围的内随机数-----------------------------------------------------------------------------4:System类的概述及其成员方法(掌握) (1)System类的概述 System类是系统类,包含一些有用的类字段和方法。它不能被实例化。 (2)System类的成员方法(自己补齐) A:public static void gc() 运行垃圾回收器 B:public static void exit(int status) 终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非0的状态码表示异常终止。 C:public static long currentTimeMillis() 返回以毫秒为单位的当前时间 D:public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 数组复制 src --> 源数组。 srcPos --> 源数组中的起始位置。 dest --> 目标数组。 destPos --> 目标数据中的起始位置。 length --> 要复制的数组元素的数量。 -----------------------------------------------------------------------------5:BigInteger类的概述及其构造方法和成员方法(理解) (1)BigInteger类的概述 针对大整数的运算,即可以让超过Integer范围内的数据进行运算。 (2)BigInteger类的构造方法(有6个) A:public BigInteger(String s) BigInteger bi = new BigInteger("2147483648"); (3)BigInteger类的成员方法 A:public BigInteger add(BigInteger val) 加 B:public BigInteger subtract(BigInteger val) 减 C:public BigInteger multiply(BigInteger val) 乘 D:public BigInteger divide(BigInteger val) 除 E:public BigInteger[] divideAndRemainder(BigInteger val) 返回商和余数的数组-----------------------------------------------------------------------------6:BigDecimal类的概述及其构造方法(理解) (1)BigDecimal类的概述 是不可变的、任意精度的有符号十进制数,可以解决数据丢失问题。 因为浮点数据做运算,会丢失精度。所以,针对浮点数据的操作建议采用BigDecimal。(金融相关的项目) 由于在运算的时候,float类型和double类型很容易丢失精度,演示案例如下所示。所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal类。 因为float类型的数据存储和整数类型的数据存储是不一样导致的。它们大部分的时候,都是带有有效数字位。 没有使用BigDecimal时的示例代码: 1 package cn.itcast_01; 2 3 /* 4 * 看程序写结果:结果和我们想的有一点点不一样,这是因为float类型的数据存储和整数不一样导致的。它们大部分的时候,都是带有有效数字位。 5 * 6 * 由于在运算的时候,float类型和double很容易丢失精度,演示案例。所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal 7 * 8 * BigDecimal类:不可变的、任意精度的有符号十进制数,可以解决数据丢失问题。 9 */ 10 public class BigDecimalDemo { 11 public static void main(String[] args) { 12 System.out.println(0.09 + 0.01); // 0.09999999999999999 13 System.out.println(1.0 - 0.32); // 0.6799999999999999 14 System.out.println(1.015 * 100); // 101.49999999999999 15 System.out.println(1.301 / 100); // 0.013009999999999999 16 17 System.out.println(1.0 - 0.12); // 0.88 18 } 19 } (2)BigDecimal类的构造方法(有16个) A:public BigDecimal(String val) (3)BigDecimal类的成员方法 A:public BigDecimal add(BigDecimal augend)) 加 B:public BigDecimal subtract(BigDecimal subtrahend) 减 C:public BigDecimal multiply(BigDecimal multiplicand) 乘 D:public BigDecimal divide(BigDecimal divisor) 除 E:public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 被除数,几位小数,如何舍取(自己保留小数几位) 已过时。 应该优先使用方法divide(BigDecimal, int, RoundingMode) 使用了BigDecimal后的示例代码: 1 package cn.itcast_02; 2 3 import java.math.BigDecimal; 4 5 /* 6 * BigDecimal类的构造方法: 7 * public BigDecimal(String val) 8 * 9 * BigDecimal类的成员方法 10 * public BigDecimal add(BigDecimal augend) 11 * public BigDecimal subtract(BigDecimal subtrahend) 12 * public BigDecimal multiply(BigDecimal multiplicand) 13 * public BigDecimal divide(BigDecimal divisor) 14 * public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 被除数,几位小数,如何舍取 15 * 已过时。 应该优先使用方法divide(BigDecimal, int, RoundingMode) 。 16 */ 17 public class BigDecimalDemo { 18 public static void main(String[] args) { 19 // System.out.println(0.09 + 0.01); 20 // System.out.println(1.0 - 0.32); 21 // System.out.println(1.015 * 100); 22 // System.out.println(1.301 / 100); 23 24 BigDecimal bd1 = new BigDecimal("0.09"); 25 BigDecimal bd2 = new BigDecimal("0.01"); 26 System.out.println("add:" + bd1.add(bd2)); // 0.10 27 System.out.println("-------------------"); 28 29 BigDecimal bd3 = new BigDecimal("1.0"); 30 BigDecimal bd4 = new BigDecimal("0.32"); 31 System.out.println("subtract:" + bd3.subtract(bd4)); // 0.68 32 System.out.println("-------------------"); 33 34 BigDecimal bd5 = new BigDecimal("1.015"); 35 BigDecimal bd6 = new BigDecimal("100"); 36 System.out.println("multiply:" + bd5.multiply(bd6)); // 101.500 37 System.out.println("-------------------"); 38 39 BigDecimal bd7 = new BigDecimal("1.301"); 40 BigDecimal bd8 = new BigDecimal("100"); 41 System.out.println("divide:" + bd7.divide(bd8)); // 0.01301 42 System.out.println("divide:" + bd7.divide(bd8, 3, BigDecimal.ROUND_HALF_UP)); // 0.013 43 System.out.println("divide:" + bd7.divide(bd8, 8, BigDecimal.ROUND_HALF_UP)); // 0.01301000 44 } 45 } View Code -----------------------------------------------------------------------------7:Date类和DateFormat类的概述及其方法(掌握) (1)Date类的概述(JDK1.1就出现了,之后使用Calendar类) Date是日期类,表示特定的瞬间,精确到毫秒。 (2)Date类的构造方法、成员方法和小案例 A:Date类的构造方法 public Date() 根据当前的默认毫秒值创建日期对象 public Date(long date) 根据给定的毫秒值创建日期对象 B:Date类的成员方法 public long getTime() 获取当前时间,以毫秒为单位 public void setTime(long time) 设置时间,以毫秒为单位 C:Date类的小案例 案例1:日期和毫秒值的相互转换。 把Date(日期)转换为一个毫秒值 把Date(日期)转换为一个毫秒值 1.通过Date类的成员方法:public long getTime() Date d = new Date(); long time = d.getTime(); 把一个毫秒值转换为Date(日期) 1.通过Date类的构造方法:public Date(long date) long time = 1000 * 60 * 60; // 1小时 Date d = new Date(time); 2.通过Date类的成员方法:public void setTime(long time) Date d = new Date(); d.setTime(1000); 案例2:你来到这个世界多少天了? 1 package cn.itcast_05; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 import java.util.Scanner; 7 8 /* 9 * 算一下你来到这个世界多少天? 10 * 11 * 分析: 12 * A:键盘录入你的出生的年月日 13 * B:把该字符串转换为一个日期 14 * C:通过该日期得到一个毫秒值 15 * D:获取当前时间的毫秒值 16 * E:用D-C得到一个毫秒值 17 * F:把E的毫秒值转换为天 18 * /1000/60/60/24 19 */ 20 public class MyYearOldDemo { 21 public static void main(String[] args) throws ParseException { 22 // 键盘录入你的出生的年月日 23 Scanner sc = new Scanner(System.in); 24 System.out.println("请输入你的出生年月日:"); // 1992-11-11 25 String line = sc.nextLine(); 26 27 // 把该字符串解析成一个日期 28 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 29 Date d = sdf.parse(line); 30 31 // 通过该日期得到一个毫秒值 32 long myTime = d.getTime(); 33 34 // 获取当前时间的毫秒值 35 long nowTime = System.currentTimeMillis(); 36 37 // 用D-C得到一个毫秒值 38 long time = nowTime - myTime; 39 40 // 把E的毫秒值转换为天 41 long day = time / 1000 / 60 / 60 / 24; 42 43 System.out.println("你来到这个世界:" + day + "天"); // 9259天 44 } 45 } View Code --------------------------------------- (3)DateFormat类的概述(抽象类) DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。是抽象类,所以使用其子类SimpleDateFormat。 即:针对日期/时间进行格式化和针对字符串(文本)进行解析的类,但是它是抽象类,所以使用其子类SimpleDateFormat。 (4)SimpleDateFormat类的构造方法(具体类) public SimpleDateFormat() 默认模式 public SimpleDateFormat(String pattern) 给定的模式 例如:常用的给定模式为:yyyy-MM-dd HH:mm:ss (5)DateFormat类的成员方法(抽象类) A:public final String format(Date date) B:public Date parse(String source) throws ParseException 日期和字符串的转换 a:Date --> String(格式化) public final String format(Date date) b:String --> Date(解析) public Date parse(String source) throws ParseException 示例代码如下: 1 package cn.itcast_03; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 7 /* 8 * (格式化) 9 * Date --> String 10 * public final String format(Date date) 11 * 12 * (解析) 13 * String --> Date 14 * public Date parse(String source) 15 * 16 * DateForamt类是针对日期/时间进行格式化和针对字符串(文本)进行解析的类,但是它是抽象类,所以使用其子类SimpleDateFormat。 17 * 18 * SimpleDateFormat类的构造方法: 19 * public SimpleDateFormat() 默认模式 20 * public SimpleDateFormat(String pattern) 给定的模式 21 * 这个给定的模式字符串该如何写呢? 22 * 通过查看API,我们就找到了对应的模式: 23 * 年 y 24 * 月 M 25 * 日 d 26 * 时 H 27 * 分 m 28 * 秒 s 29 * 一般我们要以下这种格式: 30 * 2014年12月12日 12:12:12 31 */ 32 public class DateFormatDemo { 33 public static void main(String[] args) throws ParseException { 34 // Date --> String(格式化) 35 // 创建日期对象 36 Date d = new Date(); 37 38 // 创建格式化对象 39 // 默认模式 40 // SimpleDateFormat sdf = new SimpleDateFormat(); 41 // DateFormat类的方法:public final String format(Date date) 42 // String s = sdf.format(d); 43 // System.out.println(s); // 2018/3/19 下午12:04 44 45 // 给定模式 46 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); 47 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); 48 String s = sdf.format(d); 49 String s2 = sdf2.format(d); 50 System.out.println(s); // 20180319121200 51 System.out.println(s2); // 2018年03月19日 12:12:00 52 53 54 // String --> Date(解析) 55 String str = "2008-08-08 12:12:12"; 56 // 注意:在把一个字符串解析为日期的时候,解析的格式必须和给定的字符串的格式匹配。 57 SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 58 Date dd = sdf3.parse(str); 59 System.out.println(dd); // Fri Aug 08 12:12:12 CST 2008 60 } 61 } (6)DateFormat类的案例 制作了一个针对日期操作的工具类DateUtil。(很多公司都是这样封装成自己的东西的) 示例代码如下: 1 package cn.itcast_04; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 7 /** 8 * 这是日期和字符串相互转换的工具类 9 * 10 * @author 风清扬 11 */ 12 public class DateUtil { 13 private DateUtil() { 14 } 15 16 /** 17 * 这个方法的作用就是把日期格式化成一个字符串 18 * 19 * @param d 20 * 被格式化的日期对象 21 * @param format 22 * 传递过来的要被转换的格式 23 * @return 格式化后的字符串 24 */ 25 public static String dateToString(Date d, String format) { 26 // SimpleDateFormat sdf = new SimpleDateFormat(format); 27 // return sdf.format(d); 28 return new SimpleDateFormat(format).format(d); 29 } 30 31 /** 32 * 这个方法的作用就是把一个字符串解析成一个日期对象 33 * 34 * @param s 35 * 被解析的字符串 36 * @param format 37 * 传递过来的要被转换的格式 38 * @return 解析后的日期对象 39 * @throws ParseException 40 */ 41 public static Date stringToDate(String s, String format) throws ParseException { 42 return new SimpleDateFormat(format).parse(s); 43 } 44 } View Code 1 package cn.itcast_04; 2 3 import java.text.ParseException; 4 import java.util.Date; 5 6 /* 7 * 工具类的测试 8 */ 9 public class DateUtilDemo { 10 public static void main(String[] args) throws ParseException { 11 // 格式为:yyyy年MM月dd日 HH:mm:ss 12 Date d = new Date(); 13 String s = DateUtil.dateToString(d, "yyyy年MM月dd日 HH:mm:ss"); 14 System.out.println(s); // 2018年03月19日 14:57:19 15 16 // 格式为:yyyy年MM月dd日 17 String s2 = DateUtil.dateToString(d, "yyyy年MM月dd日"); 18 System.out.println(s2); // 2018年03月19日 19 20 // 格式为:HH:mm:ss 21 String s3 = DateUtil.dateToString(d, "HH:mm:ss"); 22 System.out.println(s3); // 14:57:19 23 24 String str = "2014-10-14"; 25 Date dd = DateUtil.stringToDate(str, "yyyy-MM-dd"); 26 System.out.println(dd); // Tue Oct 14 00:00:00 CST 2014 27 } 28 } View Code ----------------------------------------------------------------------------- 8:Calendar类的概述及其方法(掌握) (1)Calendar类的概述(抽象类) Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。 即:日历类,封装了所有的日历字段值(日历类中的每个日历字段都是静态的成员变量,并且是int类型),通过统一的方法根据传入不同的日历字段可以获取值。 (2)因为Calendar类是抽象类,那么如何得到一个日历对象呢? Calendar类是抽象类,不能够直接new对象,但是Calendar类中提供了一个静态方法,该方法内部返回的是其子类对象。 Calendar rightNow = Calendar.getInstance(); // 本质返回的是子类对象 int year = rightNow.get(Calendar.YEAR); // 获取年 ...... (3)Calendar类的成员方法(抽象类) A:public static Calendar getInstance() public int get(int field) 根据日历字段得到对应的值 B:public void add(int field, int amount) 根据日历字段和一个正负数确定是添加还是减去对应日历字段的值 C:public final void set(int year, int month, int date) 设置当前日历对象的年月日 (4)Calendar类的案例 计算任意一年的2月份有多少天?(面试题)(day01_50道编程题中有这题) 示例代码如下: 1 package cn.itcast_03; 2 3 import java.util.Calendar; 4 import java.util.Scanner; 5 6 /* 7 * 获取任意一年的二月有多少天 8 * 9 * 分析: 10 * A:键盘录入任意的年份 11 * B:设置日历对象的年月日 12 * 年就是A输入的数据 13 * 月是2 14 * 日是1 15 * 是3月1日 16 * C:把时间往前推一天,就是2月的最后一天 17 * D:获取这一天输出即可 18 */ 19 public class CalendarTest { 20 public static void main(String[] args) { 21 // 键盘录入任意的年份 22 Scanner sc = new Scanner(System.in); 23 System.out.println("请输入年份:"); 24 int year = sc.nextInt(); 25 26 // 设置日历对象的年月日 27 Calendar c = Calendar.getInstance(); 28 c.set(year, 2, 1); // 其实是这一年的3月1日 29 // 把时间往前推一天,就是2月的最后一天 30 c.add(Calendar.DATE, -1); 31 32 // 获取这一天输出即可 33 System.out.println(c.get(Calendar.DATE)); 34 } 35 } View Code =============================================================================我的GitHub地址: https://github.com/heizemingjun 我的博客园地址: http://www.cnblogs.com/chenmingjun 我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun Copyright ©2018 黑泽明军 【转载文章务必保留出处和署名,谢谢!】

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册