传智播客培训2.18第一天 Java基础增强

简介:

培训已经开始几天了,一直没有做总结的想法,想想还是写写总结吧!

 

先说说myEclipce中常用的快捷键吧!

 

 

快捷键

1.  alt + / 代码自动补齐,需要配置的

              打开preferences(首选项), keys,打开快捷键配置面板

              alt+/ ,取消绑定

              content assist ,取消原先的绑定,配置成alt+/

2. ctrl+1: 错误自动修复, 注意,放行的红叉是可修复的,圆形的是不可修复的

3.导包的三种方式:

       1)将类名敲完整,按下alt+/ 进行补齐,会自动导包

       2) ctrl+1,修正错误

       3) ctrl+shift+o 整理包,导入需要的包,去掉多余的导包语句

4. ctrl+shift+f : 代码格式化

5. 管理透视图

6ctrl+2,L  自动声明变量

7. shift+enter  光标直接进入下一行

8.ctrl+alt+方向键(向上向下)  复制行

9. alt+ 方向键(向上向下) 移动当前行

 

myEclipse的使用这里就不总结了,多练习就知道快捷键的用法了!

 

感觉有收获的还是对数据类型的介绍和jdk5.0中新特性的介绍!

 

基本数据类型的包装类

1.       Integer x = 1; x = x + 1;  经历了什么过程? 装箱à 拆箱 à 装箱

2.       为了优化,虚拟机为包装类提供了缓冲池, Integer池的大小 -128~127

3.       String

/*1. String s = "abc" 虚拟机首先会检查String池里有没有"abc"对象(通过equals方法)

       // 如果有,直接返回引用,如果没有,会在池里创建一个“abc”对象,并返回引用

       String s1 = "abc";

       String s2 = "abc";

       System.out.println(s1==s2); // result: true

       */

      

       /* 2. String str = new String("abc"); 不管缓冲池是否有"abc", 都会在堆内存创建一个"abc"对象,返回引用

       // 此时,负责检查并维护缓冲池,其实堆内存的对象是缓冲池中"abc"对象的一个拷贝

       String s1 = new String("abc");

       String s2 = new String("abc");

       System.out.println(s1==s2); // result: false

       */

      

       /* 3. String s = "a" + "b" + "c" + "d";  java编译器有个合并已知量的优化功能

       // 在编译阶段就把"a" + "b" + "c" + "d" 合并为 ”abcd“

       String s = "a" + "b" + "c" + "d";

    //  String s = "abcd";

       System.out.println(s=="abcd");// result: true

       */

      

       /* 4.  String s1 = "a"; String s2 = "b"; String s3 = s1 + s2;

       // String是常量,不能相加的,java如何实现的?

        StringBuilder sb = new StringBuidler(s1);

        sb.append(s2);

        s3 = sb.toString();

        

        也就是说实际上s3是方法返回的String对象

        凡是方法返回的字符串对象都是在堆内存的,并且不负责维护缓冲池

       */

        String s1 = "a";

        String s2 = "b";

        String s3 = s1 + s2; // 堆内存的对象

        

        System.out.println(s3=="ab");// result: false

 

增强for循环

1.       作用: 对存储对象的容器进行迭代

2.       jdk5以前怎么迭代

3.       数组

String [] arr = {"a", "b", "c"};   //数组的静态定义方式,只试用于数组首次定义的时候

// 传统方式

for(int i=0; i<arr.length; i++) {

    // i依次表示数组的角标

    String s = arr[i];

    System.out.println(s);

}

System.out.println("-------------------------------------");

// jdk5中我们可以使用增强for循环迭代

// 增强for循环括号里写两个参数,第一个是声明一个变量,变量类型必须是数组元素的类型

// 第二个就是需要迭代的容器

// for循环会循环容器的length, 每次都将容器的第n-1个元素赋值给声明的变量

for(String s : arr) {

    // 循环体, 执行arr.length

    // 每次都将arr中的第n-1个元素给s

    System.out.println(s);   //

}

4.       单列集合 Collection

List list = new ArrayList();

list.add("aaa");

list.add("bbb");

list.add("ccc");

 

// 传统方式1

/* 1.获得迭代器

Iterator iter = list.iterator();

// 2.循环判断迭代器是否有下一个

while(iter.hasNext()) {

    String str = (String) iter.next(); // 将迭代器的指针移向下一个,并将迭代当前指向的元素返回

    System.out.println(str);

}

*/

// 传统方式2

for(Iterator iter=list.iterator(); iter.hasNext(); ) {

    String s = (String) iter.next();

    System.out.println(s);

}

System.out.println("--------------------------------");

// 增强for循环, 没有使用泛型的集合能不能使用增强for循环迭代?能

for(Object obj : list) {

    String s =  (String) obj;

    System.out.println(s);

}

5.       双列集合 Map

Map map = new HashMap();

map.put("a", "aaa");

map.put("b", "bbb");

map.put("c", "ccc");

 

// 传统方式迭代1

// 1. 获得所有的key

Set keys = map.keySet();

// 2.迭代keys获得所有的key

Iterator iter = keys.iterator();

while(iter.hasNext()) {

    String key = (String) iter.next(); // a b c

    // 3.根据key获得对应的value

    String value = (String) map.get(key);

    System.out.println(key + "=" + value);

}

System.out.println("---------------------------------");

// 传统方式2,必须掌握这种方式

// 1.获得所有的键值对Entry对象

Set entrys = map.entrySet();

// 2.迭代出所有的entry

iter = entrys.iterator();

while(iter.hasNext()) {

    Map.Entry entry = (Entry) iter.next();

    // 分别获得keyvalue

    String key = (String) entry.getKey();

    String value = (String) entry.getValue();

    System.out.println(key + "=" + value);

}

System.out.println("-------------------------------------");

System.out.println("增强for循环迭代,");

// 增强for循环迭代,

// 原则上map集合是无法使用增强for循环来迭代的,

// 因为增强for循环只能针对实现了Iterable接口的集合进行迭代

// Iterablejdk5中新定义的接口,就一个方法iterator方法

// 只有实现了Iterable接口的类,才能保证一定有iterator方法

// java有这样的限定是因为增强for循环内部还是用迭代器实现的

 

// 而实际上,我们可以通过某种方式来使用增强for循环

for(Object obj : map.entrySet()) {

    // obj 依次表示Entry

    Map.Entry entry = (Entry) obj;

    System.out.println(entry.getKey() + "=" + entry.getValue());

}

6.       集合迭代注意问题

// 在使用迭代器迭代集合的过程中,不能对集合进行增删操作

@Test

public void test4() {

    List list = new ArrayList();

   

    list.add("wangwu");

    list.add("zhangsan");

    list.add("lisi");

 

    Iterator iter = list.iterator();

    while(iter.hasNext()) {

        String name = (String) iter.next();

        if("wangwu".equals(name)) {

           // 从集合中删掉

           //list.remove(name);

           // 迭代过程中删除元素需要调用迭代器的方法

            iter.remove();    // 删除我迭代的集合被我迭代的最后一个元素

        }

    }

// 1 2 4

    System.out.println(list.size());

}

 

@Test

public void test5() {

    List list = new ArrayList();

   

    list.add("aa");

    list.add("bb");

   

    // 使用ListIterator迭代器

    ListIterator listIterator = list.listIterator();

    while(listIterator.hasNext()) {

       listIterator.next();

       // 迭代过程中增加元素

       listIterator.add("cc");

    }

    System.out.println(list.size());

}

7.       增强for循环注意问题

//在使用增强for循环时,不能对元素进行赋值

int[] arr = {1,2,3};

 

for(int num : arr) {

    num = 0;

}

 

System.out.println(arr[1]);

 

可变参数

1.       jdk5中方法的形参可以定义为可变参数,传入实参个数可变

// 设计一个方法求n个数的和

public static int getSum(int... arr) {

    // 可变参数在方法中仍被看做一个数组

    int sum = 0;

    for(int num : arr)

       sum += num;

    return sum;

}

2.       Arrays.asList为例演示传入不同参数的情况

// list长度为3

List list = Arrays.asList("a","b","c");

// list长度为1 因为考虑1.4语法

String[] arr = {"a","b","c"};

List list = Arrays.asList(arr);

// 同时符合1.41.5的语法,此时会优先考虑1.4的语法

       // 原因是有了新功能要保证以前的代码不出错,向后兼容

// 现在就需要将arr作为一个元素存入集合

Object obj = arr;

List list2 = Arrays.asList(obj);   // 此时只符合1.5的语法,不符合1.4的语法,没有歧义

 

List list3 = Arrays.asList(new Object[]{arr});   // 优先考虑1.4,所以数组会拆开

//System.out.println(list3.size());

// 基本数据类型数组只符合1.5的语法

int[] nums = {1,2,3};

list = Arrays.asList(nums);

System.out.println(list.size());

枚举

1.       问题:对象的某个属性的值不能是任意的,必须为固定的一组取值其中的某一个

2.       解决办法:

1)    setGrade方法中做判断,不符合格式要求就抛出异常

2)    直接限定用户的选择,通过自定义类模拟枚举的方式来限定用户的输入

       写一个Grade类,私有构造函数,对外提供5个静态的常量表示类的实例

3)        jdk5中新定义了枚举类型,专门用于解决此类问题

4)        枚举为普通java类,可以定义属性、方法、构造函数

//枚举类就是一个java类,也可以声明属性,方法,构造函数

public enum Grade4 {

    A("90-100"),B("80-89"),C("70-79"),D("60-69"),E("0-59");

   

    private String value;

    private Grade4(String value) {

       this.value = value;

    }

   

    public String getValue() {

       return value;

    }

}

 

//枚举类就是一个java, 也可以继承抽象和实现接口

public enum Grade5 {

    // 抽象类不能创建实例对象

    A("90-100"){

       // new了一个Grade5的子类实例

       public String toLocaleString() {

           return "";

       }

    }

    ,B("80-89"){

       // new了一个Grade5的子类实例

       public String toLocaleString() {

           return "";

       }

    }

    ,C("70-79"){

       // new了一个Grade5的子类实例

       public String toLocaleString() {

           return "";

       }

    }

    ,D("60-69"){

       // new了一个Grade5的子类实例

       public String toLocaleString() {

           return "";

       }

    }

    ,E("0-59"){

       // new了一个Grade5的子类实例

       public String toLocaleString() {

           return "不及格";

       }

    };

   

    private String value;

    private Grade5(String value) {

       this.value = value;

    }

   

    public String getValue() {

       return value;

    }

   

    // 对外提供一个方法,返回枚举的本地信息

    // 一个方法不知道如何实现,可以定义为抽象的

    public abstract String toLocaleString();

   

}

 

 

 

 

相关文章
|
3月前
|
存储 Java
最新Java基础系列课程--Day10-IO流文件处理(一)
最新Java基础系列课程--Day10-IO流文件处理
|
4月前
|
存储 缓存 Java
最新Java基础系列课程--Day10-IO流文件处理
最新Java基础系列课程--Day10-IO流文件处理
|
21天前
|
搜索推荐 Java
Java基础(快速排序算法)
Java基础(快速排序算法)
23 4
|
2月前
|
缓存 分布式计算 Java
Java基础深化和提高-------IO流
Java基础深化和提高-------IO流
108 0
|
3月前
|
缓存 Java Apache
最新Java基础系列课程--Day10-IO流文件处理(三)
最新Java基础系列课程--Day10-IO流文件处理
|
3月前
|
Java
最新Java基础系列课程--Day10-IO流文件处理(二)
最新Java基础系列课程--Day10-IO流文件处理
|
8月前
|
设计模式 缓存 分布式计算
|
6月前
|
存储 缓存 Java
Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO
Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO
167 0
Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO
|
7月前
|
存储 缓存 Java
【JAVA基础】 IO详解
【JAVA基础】 IO详解
37 1
|
8月前
|
存储 缓存 Java

热门文章

最新文章