zoukankan      html  css  js  c++  java
  • 2017年4月7号课堂笔记

    2017年4月7号  空气质量:中度污染

    内容:枚举,包装类,String类,String,StringBuffer,StringBuilder三者区别

    一、枚举

    老师代码:

    (1)学生实体类

    package cn.bdqn.enumDemo;

    //学生的实体类
    public class Student {
    private String name; // 姓名
    private Gender sex; // 性别

    public Gender getSex() {
    return sex;
    }

    public void setSex(Gender sex) {
    this.sex = sex;
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public Student(String name, Gender sex) {
    super();
    this.name = name;
    this.sex = sex;
    }

    public Student() {
    super();
    }

    @Override
    public String toString() {
    return "Student [name=" + name + ", sex=" + sex + "]";
    }

    // 测试方法
    public static void main(String[] args) {
    // 创建student对象
    Student student = new Student();
    /**
    * 给学生对象的性别属性赋值
    student.setSex("人妖"); 不健康的输入
    怎么解决?
    01.在对应的set方法中加入逻辑判断
    02.使用enum
    001.创建一个枚举类
    002.创建枚举值
    003.把需要限定的属性的类型改成枚举类即可!
    student.setSex(Gender.男); ===>枚举类中有 男,女
    System.out.println("学生的性别是:" + student.getSex());
    */

    student.setSex(Gender.Man);
    System.out.println("学生的性别是:" + student.getSex());
    // Gender.values()获取所有的枚举值 是个数组
    for (Gender g : Gender.values()) {
    System.out.println(g.getSex());

    }
    }

    }

    (2)枚举类

    package cn.bdqn.enumDemo;

    /**
    * 枚举类
    * 01.限定用户的输入
    * 02.所有的枚举值都是static final修饰的!(静态常量)
    * 03.构造必须是私有的!防止外部访问!
    */
    public enum Gender {
    Man(1, "男"), Woman(0, "女");// 枚举值

    private int index;
    private String sex;

    private Gender(int index, String sex) {
    this.index = index;
    this.sex = sex;
    }

    public int getIndex() {
    return index;
    }

    public void setIndex(int index) {
    this.index = index;
    }

    public String getSex() {
    return sex;
    }

    public void setSex(String sex) {
    this.sex = sex;
    }

    }

    二、包装类

    1、老师代码:

    package cn.bdqn.pack;

    import org.junit.Test;

    public class BasicTest {
    /**
    * 封装类/包装类: 把 基本数据类型转换成了一个对象!
    * 所有的包装类都是final 修饰的! 不能有子类!
    *
    * 每个基本数据类型在java.lang包下面,都有相应的包装类
    * 除了 int 和 char的包装类!其他的6个基本数据类型的包装类都是首字母大写!
    * 基本数据类型 包装类
    * byte Byte
    * short Short
    * int Integer
    * long Long
    * float Float
    * double Double
    * char Character
    * boolean Boolean
    *
    * 包装类的作用
    * 01.提供了一系列的实用方法
    * 02.集合中不允许存放基本数据类型!必须使用对应的包装类!
    *
    *
    * 数值类型的6个包装类都继承了Number类!
    * Character,Boolean,Number都类实现了Serializable接口!
    *
    * 问题?
    * 有一个方法,参数的是Serializable类型!
    * 那么,我们可以传递什么实际参数??
    * 只要是实现Serializable接口的类 都可以作为参数!
    *
    *
    * public static void getSum(Serializable s) {
    System.out.println(s);
    * }

    * public static void main(String[] args) {
    getSum(1.0);
    getSum(1);
    getSum('a');
    getSum(true);
    getSum("a"); // 为什么String也可以
    }
    *
    */

    // 所有的封装类 都有将对应的基本数据类型作为参数 来构造实例
    @Test
    public void test01() {
    Byte a = new Byte((byte) 1);
    Short b = new Short((short) 1);
    Integer c = new Integer(1);
    Long d = new Long(1);
    Double f = new Double(1.0);
    Boolean h = new Boolean(true);
    Float e = new Float(1.0); // float 有三个构造重载 多了一个double类型的值作为参数 来构造实例


    System.out.println("以上7种都有String作为参数来构造实例");

    // 没有String作为参数来 构造实例 String底层默认就是char[]
    Character g = new Character('1');
    }

    /**
    * Boolean类型构造方法的参数是String类型的时候,
    * 如果字符串的内容是true(不区分大小写),则结果为true!
    * 否则!都是false!
    */
    @Test
    public void test02() {
    Boolean b = new Boolean("TRUE");
    b = new Boolean("true");
    System.out.println(b);
    }

    /**
    * 当包装类构造方法参数是String类型的时候,
    * 01.参数不能为null 空值!(空串指的是" ")
    * 02.字符串必须是全数值类型的!
    * 否则 都会出现 NumberFormatException!
    */
    @Test
    public void test03() {
    Integer i = new Integer(null);
    i = new Integer("a12");
    }

    /**
    * 包装类.valueOf(对应的基本数据类型)
    * 返回一个表示指定的 基本数据类型(比如int) 值的 包装类(比如Integer)实例
    *
    * 包装类.valueOf(String类型的值) 除了Character之外
    * 01底层默认执行了 parseXXX()
    * 02.如果String类型的值不是全数值类型,则也抛出NumberFormatException
    */
    @Test
    public void test04() {
    Integer i = Integer.valueOf(1);
    i = Integer.valueOf("123a");
    System.out.println(i);
    }

    /**
    * XXXValue():包装类转换成基本数据类型!
    */
    @Test
    public void test05() {
    Integer i = new Integer(1);
    int a = i.intValue();
    System.out.println(i + 1);
    }

    /**
    * toString():以字符串的形式返回包装类对应的基本数据类型
    */
    @Test
    public void test06() {
    Integer i = new Integer(1);
    System.out.println(i.toString() + 2);// i.toString()===>"1"
    }

    /**
    * parseXXX():把字符串转换成对应的基本数据类型
    * 除了 Character没有!
    */
    @Test
    public void test07() {
    Integer i = new Integer(1);
    int a = i.parseInt("5");
    System.out.println(a + 1);
    }

    /**
    * 装箱:把基本数据类型转换成包装类的对象
    * 拆箱:包装类对象转化成基本数据类型的值
    */
    @Test
    public void test09() {
    Integer i = 5; // 5是int类型 自动装箱
    int a = i; // i是包装类 自动拆箱
    System.out.println(a);
    }

    /**
    * 底层默认执行了valueOf(int i)
    * 如果i 在 -128 -- +127之间,不会new对象
    * 否则new 新对象并返回!
    */
    @Test
    public void test10() {
    Integer a = 127;
    Integer b = 127;
    System.out.println(a == b); // 需要查看具体 的值
    Integer a1 = 128;
    Integer b1 = 128;
    System.out.println(a1 == b1); // 需要查看具体 的值
    }

    }

    2、图示及课堂小练习题

    三、String类

    老师代码:

    package cn.bdqn.string;

    import org.junit.Test;

    public class StringTest {
    /**
    * 01.String是不可改变的对象
    * 02.经常被改变内容的字符串尽量不要使用String(每次都内存中创建一个新对象)
    * 03.StringBuffer是可变的字符串
    * 04.经常改变的字符串 应该使用StringBuffer!效率高!
    * 05.1.5之后有StringBuilder!效率是最高的!但是线程不安全!
    * 同样的数据操作量耗时对比:String > StringBuffer > StringBuilder
    */

    // length() 返回字符串的长度
    @Test
    public void test01() {
    String a = "abc";
    System.out.println("字符串的长度:" + a.length());
    }

    /**
    * String只是重写了Object类中的equals();
    * 在Object类中的equals默认也是比较的内存地址!
    * (基本数据类型比较的是值 和 引用数据类型比较的是内存地址)
    *
    * a.equals(b)比较内容 区分大小写
    *
    * 01.先比较两者的内存地址,如果相同直接返回true
    * 02.看b是不是String类型
    * 03.再比较两者的长度
    * 04.因为Stirng底层是一个char[]类型的数组,循环比较每一个字符的值
    * 05.相等返回true
    *
    * equalsIgnoreCase:不区分大小写 内容比较
    */
    @Test
    public void test02() {
    String a = "abc";
    String b = "ABC";
    String c = "abc";
    System.out.println("a.equals(b):" + a.equals(b));
    System.out.println("a.equalsIgnoreCase(b):" + a.equalsIgnoreCase(b));
    System.out.println("a.equals(c):" + a.equals(c));
    }

    /**
    * toUpperCase()
    * toLowerCase()
    * 转换成大小写
    */
    @Test
    public void test03() {
    String a = "abc";
    System.out.println("转换成大写:" + a.toUpperCase());
    System.out.println("转换成小写:" + "HAHA".toLowerCase());
    }

    /**
    * toCharArray()
    * 把字符串转换成数组??字符数组?
    */
    @Test
    public void test04() {
    String a = "大家辛苦了!";
    char[] array = a.toCharArray();
    /**
    * array:需要遍历的集合名称
    * c:变量名称
    * char:集合中元素的类型
    */
    for (char c : array) {
    System.out.println(c);
    }
    }

    /**
    * 以指定的字符作为分割点,把字符串拆分成 !字符串数组!
    * split(regex):

    * regex==>正则表达式!!!! 有种你别看!!
    * 如果说 regex是正则表达式中的关键字 需要用 转义符 转义才能使用!
    */
    @Test
    public void test05() {
    String a = "大家[辛苦了!";
    String[] split = a.split("辛");
    String[] split1 = a.split("\[");// 需要用 转义符 转义才能使用
    for (String string : split1) {
    System.out.println(string);
    }
    }

    /**
    * 邮箱 必须有 @ .
    * 5018@qq.com
    * 查询字符 在字符串中的位置
    * indexOf: 第一次出现的位置
    * lastIndexOf:最后一次出现的位置
    */
    @Test
    public void test06() {
    String a = "大家辛苦了!真的辛苦!";
    int index = a.indexOf("辛"); // 下标从0 开始
    System.out.println(""辛"出现的位置:" + index);
    index = a.lastIndexOf("辛");
    System.out.println(""辛"最后出现的位置:" + index);
    }

    /**
    * 截取字符串
    * substring(int beginIndex):从beginIndex开始截取,包含自身位置!并且返回String!
    * substring(int beginIndex,int endIndex):
    * 从beginIndex开始截取, 到endIndex结束!并且返回String!
    * 包含beginIndex位置!不包含endIndex位置!
    */
    @Test
    public void test07() {
    String a = "大家辛苦了!真的辛苦!";
    /**
    * a = a.substring(1); System.out.println(a);
    */
    a = a.substring(1, 3);
    System.out.println(a);
    }

    /**
    * trim
    * 去掉字符串两边的空格
    */
    @Test
    public void test08() {
    String a = " 大家辛苦了 ";
    System.out.println(a.length()); // 空格算入了长度
    a = a.trim();
    System.out.println(a.length());
    }

    /**
    * replace(old,new)
    * 替换指定的字符或者是字符串
    */
    @Test
    public void test09() {
    String a = "大家辛苦了";
    a = a.replace('家', 'a');// 大a辛苦了
    a = a.replace("大a", "小家");
    System.out.println(a);
    }

    /**
    * 返回指定位置的字符!
    * charAt
    */
    @Test
    public void test10() {
    String a = "大家辛苦了";
    char result = a.charAt(2);
    System.out.println(result);
    }

    /**
    * getBytes()
    * 把字符串 存在 字节数组中


    * 字符的编码格式的由来! 有种你别看!
    */
    @Test
    public void test11() {
    String a = "大家辛苦了";
    byte[] bytes = a.getBytes();
    for (byte b : bytes) {
    System.out.println((char) b);
    }
    }

    /**
    * 字符串的拼接
    * + 可以拼接任意类型
    * concat():只能传递String类型的值
    */
    @Test
    public void test12() {
    String a = "大家辛苦了";
    a = a.concat("!真的苦!");
    System.out.println(a);
    }

    /**
    * contains():查询字符串中是否包含某个字符串!
    */
    @Test
    public void test13() {
    String a = "大家辛苦了";
    System.out.println(a.contains("大家辛"));
    }

    }

    四、String,StringBuffer,StringBuilder三者区别

    老师代码:

    package cn.bdqn.string;

    import org.junit.Test;

    public class StringBufferAndStringBuilder {

    /*
    * String, StringBuffer ,StringBuilder三者的区别
    * 01.执行速度 StringBuilder >StringBuffer > String
    * 02.StringBuilder:多线程不安全,适合单线程;StringBuffer:线程安全;String:数据量小的时候使用
    * 03.String 是不可变的!每当我们操作字符串的时候,都会创建一个新的对象!
    * StringBuilder,StringBuffer当我们操作字符串的时候,实际上是在操作一个对象!
    */

    @Test
    public void test11() {
    // 01.定义变量
    String name = "xiaohei";
    // 02.定义操作字符串的次数
    int count = 200000;
    // 03.设置开始时间
    long beginTime = System.currentTimeMillis();
    for (int i = 0; i < count / 100; i++) {
    name += "haha";
    }
    // 03.设置结束时间
    long endTime = System.currentTimeMillis();
    System.out.println("String的执行时间:" + (endTime - beginTime));
    System.out.println("****************************");
    name = "xiaohei";
    // 04.使用StringBuffer
    StringBuffer buffer = new StringBuffer(name);
    beginTime = System.currentTimeMillis();
    for (int i = 0; i < count; i++) {
    buffer = buffer.append("haha");
    }
    endTime = System.currentTimeMillis();
    System.out.println("StringBuffer的执行时间:" + (endTime - beginTime));
    System.out.println("****************************");
    name = "xiaohei";
    // 05.使用StringBuilder
    StringBuilder builder = new StringBuilder(name);
    beginTime = System.currentTimeMillis();
    for (int i = 0; i < count; i++) {
    builder = builder.append("haha");
    }
    endTime = System.currentTimeMillis();
    System.out.println("StringBuilder的执行时间:" + (endTime - beginTime));

    }
    }

    五、作业

    1、视频看完IO流

    周末准备挑灯夜战

    2、总结实用类和IO流的笔记,下次上课交

    周末准备挑灯夜战

    3、做题

    六、考试

    2017.04.07
    15: 15开始,16:05结束;答题时间:50 分钟;检查时间:0 分钟;
    成绩:88 分


    从进入面向对象以来,每次考试中间都要出去透口气(有时还不止一次),感觉答完50题后特别疲惫,跟平时做题少有直接关系。
    现在愈发体会到硕哥说的“不要大起大伏,要持续平稳的坚持学习”。还好目前进度还算勉强跟得上,要坚持不放松!
    成功的路上并不拥挤,因为坚持下来的总是少数。期待和我的战友们都坚持到最后,终生学习。
    待到大家都事业有小成时再把酒言欢。现在就是苦逼的时候,加油!

    七、老师辛苦了!

  • 相关阅读:
    为开源项目 go-gin-api 增加后台任务模块
    将多行数据以',' 进行分隔
    syslog中的“(CRON)信息(未安装MTA,丢弃输出)”错误,crontab定时任务失效
    为什么我不推荐大家去外包公司?
    Linux永久修改系统时间
    云数据库 Redis 暂时不支持外网访问
    Nginx中worker connections问题的解决方法 大量用户502
    入手
    nginx 之$proxy_host|$host|$http_host区别
    grpc-golang入门
  • 原文地址:https://www.cnblogs.com/wsnedved2017/p/6677845.html
Copyright © 2011-2022 走看看