Java 学习日志(一)

3/3/2017来源:C/C++教程人气:477

1.明确包装类型与基本数据类型的区别。 【基本数据类型对象包装类】 想要对基本类型数据进行更多的操作,最方便的方式就是将其封装成对象。 为啥呢?因为在对象描述中就可以定义更多的属性和行为对该基本数据类型进行操作。 【八种基本数据类型的包装类】
基本类型 对应的包装类
byte Byte
short Short
int integer
long Long
float Float
double Double
char Charcter
boolean Boolean
【基本数据类型变成对象包装类的好处】             可以将基本数据和字符串之间进行互相的转换。 如:int类型的取值范围是多少?         这就应该去查  Integer —— Integer.MAX_VALUE ;  【基本数据类型包装类的主要作用: 进行基本数据类型和字符串之间的转换】                                                                                【基本类型数据 转为 字符串 的三种方式】
1.  基本数据类型对象包装类中的方法 static String toString(基本类型);
2.  String类中的方法: static String valueOf(基本类型)
3.  基本类型数据 +“ ”; 【重点要掌握的就是:】         字符串---->基本类型数据。              返回值类型——>基本类型 ;参数——>字符串。              基本数据类型  变量名 = 基本数据类型包装类.parseXxx(XxxString);                 Long  l = Long.parseLong("4546545646546");             System.out.PRintln(Integer.parseInt("23") + 1);             在八个基本类型对象包装类中只有一个对象没有parse方法,就是Character. 【类型转换错误】——NumberFormatException——数字格式异常——我碰到了,因为我多加了一个 空格。 【Integer中要掌握的方法】涉及到一个进制转换的问题。 十进制-->其他进制。 二进制:static String toBinaryString(int); 16进制:static String toHexString(int); 八进制:static String toOctalString(int); 其他进制——>转成十进制;         Integer.toString(6 , 2); 将6转换为二进制。         parseInt(intString , radix);             System.out.println(Integer.parseInt("110") , 2); ———————————————————————————————— 【基本数据类型值  和 基本类型数据对象之间的转换】             使用构造函数——Integer();             即可以接受基本数值,也可以接收基本数值的字符串形式。             可以使用基本类型对象中的方法。 static Integer valueOf(int); 【基本类型的对象  和  基本数据类型数值】             int intValue(); 如:     Integer i = new Integer(34);     int num = i.intValue( );     System.out.println(num); ———————————————————————————————————————————— 【如果两数被封装成了对象该如何比较呢?】                 【 基本数据类型的比较——用比较运算符; 引用数据类型使用compareTo进行比较。】     int  compareTo( Integer anotherInteger ) 在数字上比较两个Integer对象。 在数值上比较两个Integer对象。以0 正数 负数 比较两个数多的大小。 Integer a = new Integer(7); Integer b = new Integer(5); System.out.println(a.compareTo(b)); 【重点】 对象想要进行比较,必须通过方法来完成,这个方法就是compareTo。 而很多对象都可以进行比较。所以这个方法定义在Comparable接口中。 想要对象具备比较功能,只要实现Comparable接口。 【练习题】。 ———————————————————————————————————————————————— 【基本数据类型对象包装类JDk1.5以后的新特性】——【自动拆箱,装箱】 简化书写。 Integer i = new Integer(5); 基本数据类型对象包装类,对象创建的简化写法Integer i = 5; 1. Integer i = 5;(其实在内存中也是通过 new Integer(5)这种方式创建的!) 这种方式成为——自动装箱,Integer.valueOf(5)自动完成了对象创建的动作。 2. 在进行 i = i + 5,运算时—— = 右边的i 会先转成基本数据值(自动拆箱)i.intValue(),其实质为: i = i.intValue() + 5 ;然后再和5进行加法运算。 = 右边运算完的结果,再次被自动装箱变成Integer对象赋给i. 一旦简化就有弊端:多具备一个值null. 使用自动装箱拆箱时,要进行null的健壮性判断。 【实例】 Integer x = null; x = x.intValue() + 4;    x为null 不能调用方法,此时会发生:NullPointerException异常。 ———————————————————————————————— Boolean b = true; boolean b = true;的区别 答:前者:类类型变量指向一个对象,true为一个对象;         后者:true为基本类型变量。 ———————————————————————————————— 在JdK1.5的新特性自动装箱中,如果数值在byte类型范围内(-128 ~ 127)。如果该对象数值重复出现 多个引用其实是指向同一个Integer对象,节省空间!但是超出了byte范围,都会生产新的Integer对象。 Integer m = 127; Integer n = 127; System.out.println( m == n); //true System.out.println(m.equals(n));  //true ____________________________________ Object x = 5;Object x 接受到了一个Integer对象,自动装箱。 然而 Object不可以接受基本数据类型。 —————————————————————————————————————— 【面试题】——"34 9 -7 67 25"要求对这个字符串中的数值进行从小到大的排序,生成一个数值有序的字符串。 【必须会】 思路: 1. 把其中的数拿出来,——对字符串进行切割。 2. 对数进行排序 3. 再追加成字符串。 步骤:1.split;——这个方法我还没掌握,怎么用。 【】——数组排序       2.定义一个int数组  将 字符串数组——>int数组       3.对int数组排序;       4. 将int数组转成字符串数组。 代码体现: [java] view plain copy  print? /**   * 需求:"34 9 -7 67 25"要求对这个字符串中的数值进行从小到大的排序,生成一个数值有序的字符串。   * @author Administrator   *   */   public class StringTestint {       /**       * @param args       */       public static void main(String[] args) {           // TODO Auto-generated method stub           //要操作的目标           String s = "34 9 -7 67 25";           //用空格对原字符串进行切割,转成字符串数组;           String[] s1 = s.split(" ");           //定义int[]数组,用来存放整型数据           int[] arr = new int[s1.length];           //将字符串数组转成int类型的数组。           for(int i = 0 ; i < s1.length; i++)               arr[i] = Integer.parseInt(s1[i]);           //对int类型的数组进行排序           for(int i = 0 ; i < s1.length;i++){               for(int j = i+1 ; j < s1.length;j++){                   if(arr[i] > arr[j]){                       int temp = arr[i];                       arr[i] = arr[j];                       arr[j] = temp;                   }               }           }           //定义字符串缓冲区,并将int类型的数组转换为 字符串类型的数组。           StringBuilder sb = new StringBuilder();           for (int i = 0; i < arr.length; i++) {               if(i != arr.length - 1)                   sb.append(arr[i] + " ");               else                   sb.append(arr[i]);           }           System.out.println(sb);            }   }   代码优化: [java] view plain copy  print? import java.util.Arrays;      public class WrapperTest2 {          private static final String SPACE = " ";       /**       * @param args       */       public static void main(String[] args) {              /*           * 综合练习:           * "34 9 -7 12 67 25"要求对这个字符串中的数值进行从小到大的排序,           * 然后生成一个数值有序的字符串。           *            * 思路:           * 1,看到排序,就想要到了数组           * 2,那数组中的元素怎么获取呢?数值都在字符串中。           * 3,先从字符串中获取到这些具体的数值。怎么获取呢?           * 4,发现这个字符串居然有规律。数值之间都是由空格隔开的。           *      可以对字符串进行切割。           * 5,将获取的数据存储到数组中并排序,在将数组转成字符就可以了。哦了。           *            *            * 步骤:           * 1,将字符串切割成字符串数组。split。           * 2,定义一个int数组将字符串数组中的元素转成整数存储到int数组中。           * 3,对int数组排序。           * 4,将int数组排序后转成一个字符串。            *            */                      String str = "34 9 -7 12 67 25";                      str = sortStringNumber(str);           System.out.println(str);       }          public static String sortStringNumber(String str) {                      //1,将字符串中的数值通过指定的规则进行切割获取字符串数组。           String[] str_nums = toStringArray(str);                      //2,将字符串数组转成int数组。            int[] nums = toIntArray(str_nums);                      //3,对int数组排序;           sortIntArray(nums);                      //4,将int数组变成字符串。            return arrayToString(nums);       }       /*       * 将int数组变成字符串。        */       private static String arrayToString(int[] nums) {           //1,创建字符串缓冲区。           StringBuilder sb = new StringBuilder();           for (int i = 0; i < nums.length; i++) {               if(i!=nums.length-1)                   sb.append(nums[i]+SPACE);               else                   sb.append(nums[i]);           }                      return sb.toString();       }          /*       * 对int数组排序。        */       private static void sortIntArray(int[] nums) {           Arrays.sort(nums);       }          /*       * 将字符串数组转成int数组。        */       private static int[] toIntArray(String[] str_nums) {           //1,先定义一个int数组。            int[] arr = new int[str_nums.length];                      //2,对字符串数组进行遍历。           for (int i = 0; i < str_nums.length; i++) {               //将数组格式的字符串转成整数。存储到arr数组中。                arr[i] = Integer.parseInt(str_nums[i]);           }                                 return arr;       }       /*       * 将字符串转成字符串数组。        */       private static String[] toStringArray(String str) {                      return str.split(SPACE);       }                    }   2.适当练习valueOf()、xxxValue()、parseXxx()方法。 3.类型转换(以下为该周作业)。 public class StudyDiary01   {       public static void main(String[] args){              //String --> int           String s = "111";           int i1 = Integer.parseInt(s); //直接使用静态方法,不会产生多余的对象,但会抛出异常           System.out.println("String --> int : i1=" + i1);                       int i2 = Integer.valueOf(s).intValue(); //Integer.valueOf(s) 相当于 new Integer(Integer.parseInt(s)),也会抛异常,但会多产生一个对象           System.out.println("String --> int : i2=" + i2);                       int i3 = Integer.parseInt(s,10);//若int i = Integer.parseInt("123",16);即可以看成i  = 1*16*16+2*16+3           System.out.println("String --> int : i3=" + i3 + '\n');                   //int --> String            int j = 222;           String t1 = String.valueOf(j);//直接使用String类的静态方法,只产生一个对象           System.out.println("int --> String : t1=" + t1);                       String t2 = Integer.toString(j);  //直接使用静态方法,产生新的对象,会抛出异常           System.out.println("int --> String : t2=" + t2);              String t3 = "" + j; //会产生两个String对象           System.out.println("int --> String : t3=" + t3 + '\n');                  //int --> Integer           int m = 333;           Integer n1 = m; //装箱           System.out.println("int --> Integer:n1=" + n1);              Integer n2 = new Integer(n1);           System.out.println("int --> Integer:n2=" + n2);              Integer n3 = Integer.valueOf(n2);           System.out.println("int --> Integer:n3=" + n3 + '\n');                 //Integer --> int           Integer x=444;           int y1 = x; //拆箱           System.out.println("Integer --> int:y1=" + y1);              int y2 = x.intValue();           System.out.println("Integer --> int:y2=" + y2);              int y3 = Integer.valueOf(x);           System.out.println("Integer --> int:y3=" + y3 + '\n');                 //String --> Integer           String r = "555";           Integer k1  = Integer.valueOf(r);  //这种方法常用           System.out.println("String --> Integer:k1=" + k1);              Integer k2 = new Integer(r);           System.out.println("String --> Integer:k2=" + k2);              Integer k3 = Integer.parseInt(r);           System.out.println("String --> Integer:k3=" + k3);              Integer k4 = Integer.parseInt(r,10);           System.out.println("String --> Integer:k4=" + k4 + '\n');                 //Integer --> String           Integer l = 666;           String z1 = String.valueOf(l);           System.out.println("Integer -->Stringf:z1=" + z1);              String z2 = l.toString();           System.out.println("Integer -->Stringf:z2=" + z2);              String z3 = "" + l;           System.out.println("Integer -->Stringf:z3=" + z3 + '\n');       }      } (1)String转换为int int i = Integer.parseln(str); int i = Integer.valueOf(str).intValue(); (2)String转换为Integer   两种构造方法的区别,Character只有一种 (3)int转换为String   String s = s.valueOf(i);   String s = Integer.toString(i);   String s = “”+i; (4)int转换为Integer (5)Integer转换为String (6)Integer转换为int (7)Integer转换为String 4.通过键盘输入,初始化两个数将这两个数值交换后,输出显示后的数据。 import java.util.Scanner;      public class StudyDiary02   {          public static void main(String[] args){           Scanner input = new Scanner(System.in);           System.out.print("请输入第一个值:");           int a = input.nextInt();           System.out.print("请输入第二个值:");           int b = input.nextInt();           System.out.println("交换之前的两个值为"+a+","+b);           int c;           c = a;           a = b;           b = c;           System.out.println("交换之后的两个值为"+a+","+b);           }   }   5.定义一个五位整数,求各个位上的数的和 import java.util.Scanner;      public class StudyDiary03   {       public static void main(String[] args) {       Scanner in  = new Scanner(System.in);       System.out.print("请输入一个五位整数:");       int i = in.nextInt();       int sum = 0;       if (i < 10000 || i > 99999) {           System.out.println("输入有误!");           } else {               for (int j = 0; j < 5  ; j++ ) {                   sum +=  i % 10;                   i = i / 10;                   }                   System.out.println("该五位整数各位数上之和为sum=" + sum );                   }           }   }    6.根据天数计算周数和剩余的天数。天数通过键盘输入。 import java.util.Scanner;      public class StudyDiary04   {       public static void main(String[] args){       Scanner in = new Scanner(System.in);       System.out.print("请输入要转换的天数:");       int day = in.nextInt();       int week = day  /  7;       day =  day % 7;       System.out.println("为" + week + "周," + day + "天。");       }   }   7.学会使用API文档,看一看String类的所有方法。(ing......) 8.明确什么是引用类型,和C++的指针有什么异同,掌握java中数组的基本知识,例如(动态/静态)初始化,赋值,求大小,关于大小改变与C/C++中的区别。