java基础增强

Posted 小不点啊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础增强相关的知识,希望对你有一定的参考价值。

1. 静态导入和自动装箱拆箱

(1).静态导入: 导入java里面类的静态成员 import static 包名 类名 静态属性/静态方法/*
(2).自动装箱拆箱:
自动装箱:把基本数据类型赋值给对应的包装类(对象)
自动拆箱:把包装类的对象赋值给对应的基本数据类型

 1 package com.study.lgs;
 2 import static java.lang.System.out;
 3 
 4 import java.util.ArrayList;
 5 import java.util.Iterator;
 6 import java.util.List;
 7 public class ZhuangXiangChaiXiang {
 8 
 9     public static void main(String[] args) {
10         // TODO Auto-generated method stub
11         //1、静态导入
12         //out.println("aaa");
13         
14         //2.自动装箱拆箱:
15         Integer i=1;//自动装箱  jdk1.5+才能这样写 否则这样写:Integer i=new Integer(1)
16         int j=i;//自动拆箱
17         
18         //3.自动装箱拆箱的典型应用
19         List l=new ArrayList();
20         l.add(1);//装箱 把对象1装到list对象l里面去
21         l.add(2);
22         l.add(3);
23     
24         //迭代器遍历输出
25         Iterator k=l.iterator();
26         while(k.hasNext()){
27             int j1=(Integer)k.next();
28             out.println(j1);
29             
30             
31         }
32         /*ArrayList<Integer> al=new ArrayList<Integer>();
33         al.add(1);
34         al.add(2);
35         al.add(3);
36         for(Integer k:al){
37             out.println(k);
38         }*/
39     }
40 
41 }

2. 增强for循环

    用途:遍历数组或者遍历实现Iterable泛型接口的集合

  1 package cn.study.lgs;
  2 import static java.lang.System.out;
  3 
  4 import java.util.ArrayList;
  5 import java.util.HashMap;
  6 import java.util.Iterator;
  7 import java.util.List;
  8 import java.util.Map;
  9 import java.util.Map.Entry;
 10 import java.util.Set;
 11 
 12 import org.junit.Test;
 13 
 14 public class StrongFor {
 15     
 16     @Test
 17     public void test1(){
 18         //1、遍历数组
 19         int i[]={1,2,3};
 20         for(int k:i){
 21             out.println(k);
 22         }
 23     }
 24     @Test
 25     public void test2(){
 26         //2、遍历集合
 27         List l=new ArrayList();
 28         l.add(1);
 29         l.add(2);
 30         l.add(3);
 31     //    l.add("aaa");
 32         
 33         for(Object o:l){
 34 //            out.println(o); //不用包装直接以对象的形式输出 也可以
 35             int i=(Integer) o;
 36             out.println(i);
 37         }
 38         }
 39     @Test
 40     public void testMap(){
 41         Map m=new HashMap();
 42         m.put("1", "aaa");
 43         m.put("2", "bbb");
 44         m.put("3", "ccc");
 45         //1、传统方案取出Map里面的值 1
 46         Set s=m.keySet();//通过keyset方法把map里面的每个key存到s里面去
 47         Iterator i=s.iterator();//迭代遍历s里面的key值
 48         while(i.hasNext()){
 49 //            String key=(String) i.next();
 50 //            String value=(String) m.get(key);
 51 //            out.println(key+"对应的值为:"+value);
 52             String st=(String) i.next();
 53             System.out.println(st+ "对应的值为"+m.get(st));
 54             
 55 //            System.out.println(i.next());  //有错 两次的i.next()不一样
 56 //            System.out.println(m.get(i.next()));
 57         
 58             
 59         }
 60         
 61         
 62     }
 63     @Test
 64     public void testMap2(){
 65         Map m=new HashMap();
 66         m.put("1", "aaa");
 67         m.put("2", "bbb");
 68         m.put("3", "ccc");
 69         //1、传统方案取出Map里面的值 2
 70         Set s=m.entrySet();//通过entrySet方法把每组键值存到s中
 71         Iterator i=s.iterator();//迭代遍历输出s中的值
 72         while(i.hasNext()){
 73             Map.Entry me=(Entry) i.next();
 74             System.out.println(me.getKey()+"对应的值为"+me.getValue());
 75         }
 76         
 77         
 78         
 79     }
 80 
 81     @Test
 82     public void testMap3(){
 83         Map m=new HashMap();
 84         m.put("1", "aaa");
 85         m.put("2", "bbb");
 86         m.put("3", "ccc");
 87         //1、增强for循环 1 (keySet实现Iterable泛型接口)
 88         for(Object o:m.keySet()){
 89 //            String s=(String) o;
 90 //            String value=(String) m.get(o);
 91 //            System.out.println(o+" "+value);
 92             out.println(o+" "+m.get(o));
 93         }
 94         
 95         
 96     }
 97     @Test
 98     public void testMap4(){
 99         Map m=new HashMap();
100         m.put("1", "aaa");
101         m.put("2", "bbb");
102         m.put("3", "ccc");
103         //1、增强for循环 2 (entrySet实现Iterable泛型接口)
104         for(Object o:m.entrySet()){
105          Map.Entry me=(Entry) o;
106          System.out.println(me.getKey()+" "+me.getValue());
107         }
108         
109         
110     }
111     
112     @Test //增强for循环应该注意的问题 增强for循环只能取数组或者集合里面的数据 不能更改数据;要改数据的话只能用传统方法
113     public void test3(){
114 //        int []i=new int[]{1,2,3};
115 //        for(int j:i){
116 //            j=10;//j仅仅是指向取出来的值而已 并不能改变数组里面的值
117 //            
118 //        }
119 //        //传统方法改变数组的值
120 //        for(int j=0;j<i.length;j++){
121 //            i[j]=10;
122 //        }
123 //        out.println(i[0]);
124 //        out.println(i[1]);
125 //        out.println(i[2]);
126 //        
127 
128         List l=new ArrayList();
129         l.add("a");
130         l.add("b");
131         l.add("c");
132         for(Object k:l){
133             k="d";//k仅仅是指向取出来的值而已 并不能改变集合里面的值
134             
135         }
136         //传统方案删除集合里面的元素
137         for(int i=0;i<l.size();i++){
138             
139             l.removeAll(l);
140             
141             
142             
143         }
144         l.add("e");
145         l.add("e");
146         l.add("e");
147         System.out.println(l.get(0));
148         System.out.println(l.get(1));
149         System.out.println(l.get(2));
150         
151     
152     }
153 }

3. 可变参数

使用可变参数的精髓:就是看需要什么类型的数据,需要对象就传入对象/对象数组,需要基本数据类型就传基本数据类型/基本数组

 1 package com.study.lgs;
 2 import java.util.Arrays;
 3 import java.util.List;
 4 
 5 import org.junit.Test;
 6 
 7 public class KeBianCanShu {
 8     
 9     @Test
10     public void testSum(){
11         int []i={1,2,3};
12         sum(i);//可变参数里面可以看成一个数组,所以可以向里面传入数组i
13         sum(1,2,3);
14     }
15     //可变参数按数组方式进行处理,只能放在参数列表的最后,一个参数列表中只能有一个可变参数
16     
17     public void sum(int...nums){
18         int sum=0;
19         for(int k:nums){
20             sum+=k;
21         }
22         System.out.println(sum);
23     }
24     @Test
25     public void testArrays(){
26         List l=Arrays.asList("1","2","3");//传入普通字符串对象
27         System.out.println(l);
28         
29         String [] s={"1","2","3","4"};//传入字符数组对象
30         l=Arrays.asList(s);
31         System.out.println(l);
32         
33         //int []i={1,2,3,4,5};
34         Integer []i={1,2,3,4,5};
35         l=Arrays.asList(i);//传入基本数据类型整型数组对象 List的l会吧i数组看作一个对象,所以输出的l为一个地址,必须使用包装类的对象以对象方式传入才可输出实际的值
36         System.out.println(l);
37     }
38 
39 }

4. 枚举

4.1 枚举的作用和特性

  作用:限定某些程序运行时所需要数据的取值范围

  特性:

      (1) 枚举类也是一种特殊形式的java类

      (2) 枚举类中声明的每一个枚举值代表枚举类的一个实例对象

      (3) 与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须是私有的(因为枚举类的作用就是限定某些程序运行时所需要数据的取值范围,如果构造函数公有,别人就可以随便更改)

      (4) 枚举类也可以实现接口、继承抽象类

      (5) jdk5扩展了switch语句,它除了可以接收int,byte,char,short外,还可以接收一个枚举类型

      (6) 若枚举类只有一个枚举值,则可以单作单态设计模式使用

 1 package enumeration;
 2 
 3 import org.junit.Test;
 4 
 5 //枚举的作用:限定某些程序运行时所需要数据的取值范围
 6 enum Grade{
 7     A,B,C,D
 8 }
 9 public class DefineEnum {
10     @Test
11     public void test(){
12         DefineEnum.printGrade(Grade.A);
13     }
14     public static void printGrade(Grade a){
15         switch(a){
16         case A:
17             System.out.println("90");
18              break;
19         case B:
20             System.out.println("80");
21             break;
22         case C:
23             System.out.println("70");
24             break;
25         case D:
26             System.out.println("60");
27             break;
28         default:
29             System.out.println("传入参数有错");
30             
31         }
32     }
33 }

4.2 定义枚举的字段、构造函数、方法去封装更多的信息

 1 package enumeration;
 2 
 3 import org.junit.Test;
 4 
 5 //枚举的作用:限定某些程序运行时所需要数据的取值范围
 6 //怎样定义枚举的字段、构造函数、方法去封装更多的信息
 7 enum Grade{
 8     A("100-90"),B("89-80"),C("79-70"),D("69-60");//对枚举进行实例化
 9     private String value;//定义每个枚举类型里面存的值
10     private Grade(String value){
11         this.value=value;
12     }
13     public String getValue(){ //外部对象获取每个枚举类型里面存的值
14         return this.value;
15     }
16 }
17 public class DefineEnum {
18     @Test
19     public void test(){
20         printGrade(Grade.B);
21     }
22     public void printGrade(Grade a){
23         System.out.println(a.getValue());
24     }
25 }

4.3 带抽象方法的枚举 实例化时必须实现抽象方法

 1 package enumeration;
 2 
 3 import org.junit.Test;
 4 
 5 //枚举的作用:限定某些程序运行时所需要数据的取值范围
 6 //带抽象方法的枚举 实例化时必须实现抽象方法
 7 enum Grade{
 8     A("100-90") {
 9         @Override
10         public String getLocalValue() {
11             // TODO Auto-generated method stub
12             return "优";
13         }
14     },
15     B("89-80") {
16         @Override
17         public String getLocalValue() {
18             // TODO Auto-generated method stub
19             return "良";
20         }
21     },
22     C("79-70") {
23         @Override
24         public String getLocalValue() {
25             // TODO Auto-generated method stub
26             return "中";
27         }
28     },
29     D("69-60") {
30         @Override
31         public String getLocalValue() {
32             // TODO Auto-generated method stub
33             return "差";
34         }
35     };//对枚举进行实例化 必须实现抽象方法
36     
37     private String value;//定义每个枚举类型里面存的值
38     private Grade(String value){
39         this.value=value;
40     }
41     public String getValue(){ //外部对象获取每个枚举类型里面存的值
42         return this.value;
43     }
44     //带抽象方法的枚举
45     public abstract String getLocalValue();
46 }
47 public class DefineEnum {
48     @Test
49     public void test(){
50         printGrade(Grade.B);
51     }
52     public void printGrade(Grade a){
53         System.out.println(a.getValue());
54         System.out.println(a.getLocalValue());
55         
56     }
57 }

4.4 普通单例设计模式与枚举单例设计模式

 1 package enumeration;
 2 
 3 //定义普通单态设计模式
 4 class Single{
 5     private static Single sin=null;
 6     private Single(){}
 7     private Single(Single sin){
 8         this.sin=sin;
 9     }
10     public static Single createShiLi(){
11         if(sin==null){
12             sin=new Single();
13         }
14         return sin;
15         
16     }
17 }
18 //定义枚举类型单态设计模式 当枚举里面只有一个对象时也属于单态设计模式
19 enum EnumSingle{
20     A;//枚举中声明的每一个枚举值表示枚举类的一个实例化对象
21       //m枚举类的构造函数必须是私有的,因为枚举就是用来限制实例化的对象的,如果构造函数为公有的就可以实例化新的对象,不符合枚举规范    
22 }
23 public class DefineSingle {
24 
25     public static void main(String[] args) {
26         // TODO Auto-generated method stub
27         //普通设计模式的实例化
28         Single s1=Single.createShiLi();
29         Single s2=Single.createShiLi();
30         Single s3=Single.createShiLi();
31         System.out.println(s1);
32         System.out.println(s2);
33         System.out.println(s3);
34         
35         
36 
37     }
38 
39 }

 




以上是关于java基础增强的主要内容,如果未能解决你的问题,请参考以下文章

java 分解质因数 基础增强

java基础-008

Java语言基础之方法的设计

JSP基础

[Java基础]增强for循环

java基础增强