资讯详情

JavaSE基础加强-学习黑马程序员Java基础视频教程(P93开始)

目录

  • P0:写在前面的小知识
  • P93:下阶段:JavaSE基础加强简介
  • P95:static:修改成员变量、内存机制
  • P96:static:修改成员的方法、内存机制
  • P97:static:访问注意事项[扩展,面试]
  • P98:static:应用知识-工具
  • P99:static:应用知识-代码块
  • P100:static:应用知识-单例模式
  • P101:继承:概述、案例
  • P102:继承:特点、访问特点、方法重写
  • P103:继承:结构特性this、super小结
  • P105:语法:包、权限修饰符
  • P106:语法:final的语法
  • P107:语法:常量和常量在发展中的作用
  • P108:语法:枚举和枚举
  • P109:抽象:概述、案例、特征
  • P110:抽象:模板方法模式
  • P111:接口:概述、多实现、多继承
  • P112:新方法、注意事项(项(理解)
  • P113:多态概述、优势、类型转换问题
  • P114:多态综合案例
  • P115:内部类
  • P116:匿名内部类(重点)
  • P117:常用API-Object、Objects
  • P118:常用API-StringBuilder
  • P119:常用API-Math、System、BigDecimal
  • P日期时间:Date、SimpleDateFormat、Calendar
  • P122:JDK开始新的日期API
  • P123:包装类
  • P124:正则表达式
    • P124.1 正则表达式的初步体验
    • P124.2 正则表达式匹配规则
    • P124.3 正则表达式案例
    • P124.4 按正则表达式匹配,分割字符串
    • P124.5 爬取信息
  • P125:Arrays类
  • P126:选择排名,搜索两分
    • P126.1 选择排序
    • P126.2 二分查找
  • P127:Lambda表达式
    • P127.1 概念
    • P127.2 实例
    • P127.3 Lambda省略表达式规则(进一步简写)
  • P129:集合概述,Collection系统特征集合
    • P129.1 概述
    • P129.2 体系结构
      • P129.2.1 Collection
  • P130:Collection常用API、遍历方式、存储自定义类型的对象
    • P130.1 常用API
    • P130.2 遍历方式
      • P130.2.1 迭代器 Iterator
      • P130.2.2 foreach/增强for循环
      • P130.2.3 lambda表达式
    • P130.3 Collection集合存储自定义对象类型
  • P131:常见数据结构简介
    • P131.1 数据结构概述、栈、队列
    • P131.2 数组
    • P131.3 链表
    • P131.4 二叉树,二叉找树
    • P131.5 平衡二叉树
    • P131.6 红黑树
  • P131:List系列并发修改异常问题
    • P131.1 List集合特征,独特API
    • P131.2 4种遍历方法
    • P132.3 ArrayList的底层原理
    • P132.4 LinkedList的底层原理
    • 补充知识:并发修改异常问题
  • P132:泛型深度、自定义泛型、泛型通配符、上下限

???

接收方式:关注微信微信官方账号:黑马程序员,回复关键词:接收资源02

黑马程序员在这个博客中Java基础视频教程-课程总结文档,我写徐磊老师xmind将图片转化为方便观看。

?? Java入门-学习黑马程序员Java基本视频教程(到P92)

???

P0:写在前面的小知识

???

(先记录在这篇博文中,然后与第一篇博文集成)

???

6.格式输出(参考链接:Java如何格式化输出?

  • 一般方式:System.out.println("x = " x ", y = " y);
  • printf()方式:System.out.printf("x = %d, y = %f\n", x, y);
  • format()方式:System.out.format("x = %d, y = %f\n", x, y);

format与printf是等价的 %d表示整数类型,%f表示浮点数类型。%.2f小数点保留后的两位

7.:成员变量、构造器、方法、代码块、内部类别

8.

9.继承

  • Java所有类都是Object的子类
  • 访问成员(成员变量,成员方法)在子类方法中满足:就近原则,使用关键字super.this.指定访问父子成员

10.权限修饰符的作用范围:从小打大:private -> 缺省 -> protected ->public

在这里插入图片描述

11.类前使用的一些特殊关键词:final、abstract、interface

  • final 与 abstract互斥关系。final定义的类别不能继承;相反abstract定义的类必须继承;final不能重写定义方法,abstract重写定义的方法笔记
  • 继承:public 子类名 extends 父类名(只能单独继承)
  • 实现:public interface 子类名 implement 父类名1,父类名2…(可多实现)
  • 如果一个子类又要继承又要实现,则要先继承后实现,例如:class Cat extends Animal implements Food{ }
  • 接口不能实例化,对象不能创建

12.时间毫秒值:指从1970年1月1日 00:00:00走到这一刻的总毫秒。1s=1000ms(1970年1月1日 算C语言生日,在P119)

11.直接打印集合类,显示的结果是内;直接打印数组显示的是地址,可用集合类转为字符串Arrays.toString(arr);

12.一个.java文件中可以写多个class,但是只能有一个类的前面加有修饰词public

P93:下阶段:JavaSE基础加强简介

P95:static:修饰成员变量、内存机制

  • 同一个类中访问静态成员变量可以省略类名,即通常访问格式为User.onLineNum,但是可省略写成onLineNum
  • 静态成员变量:有static,属于类,加载一次,可以被共享访问
  • 实例成员变量:无static,属于每个对象

P96:static:修饰成员方法、内存机制

P97:static:访问的注意事项[拓展、面试]

static访问注意事项:

  • 静态方法只能访问静态的成员,不可以直接访问实例成员(因为实例成员必须由对象触发)
  • 实例方法可以访问静态的成员,也可以访问实例成员
  • 静态方法中是不可以出现 this 关键字的(this 关键字指明的是当前对象的地址)
  • 静态成员只能由类触发;实例成员可由类、对象触发。

P98:static:应用知识-工具类

类中都是一些静态方法,每个方法都是以完成一个共用的功能为目的,这个类用来给系统开发人员共同使用的。

调用方便,提高了代码复用(一次编写,处处可用)

package d3_static_test;

public class TestDemo { 
        
    public static void main(String[] args) { 
        
        int[] a = null;
        int[] b = { 
        };
        int[] arr = { 
        10, 20, 30, 40, 50};
        System.out.println(ArrayUtils.toString(arr));
        System.out.println(ArrayUtils.toString(a));
        System.out.println(ArrayUtils.toString(b));

        System.out.println("------------------------");
        double[] arr2 = { 
        10, 20.5, 30.2, 40.9, 6, 2};
        System.out.printf("average = %.2f\n", ArrayUtils.getAverage(arr2));
        System.out.println("average = " + ArrayUtils.getAverage(null));

    }

}

package d3_static_test;

public class ArrayUtils { 
        

    // 定义一个私有的构造器,表明不能将此类实例化成对象
    private ArrayUtils() { 
        

    }

    // 将整数一维数组转为String类型,格式为[x1, x2, ...]
    public static String toString(int[] arr){ 
        
        if (arr == null){ 
        
            System.out.println("Array is NULL.");
            return null;
        }

        String s = "[";
        for (int i = 0; i < arr.length; i++) { 
        
            s += i == arr.length - 1 ? arr[i] : arr[i] + ", ";
        }
        return s + "]";
    }

    // 返回将浮点数类型一维数组的平均值(出去最高、最低值)
    public static double getAverage(double[] arr){ 
        
        if (arr == null){ 
        
            System.out.println("Array is NULL.");
            return -1;
        }

        double max = arr[0], min = arr[0], sum = arr[0];
        for (int i = 1; i < arr.length; i++) { 
        
            if (arr[i] > max){ 
        
                max = arr[i];
            }
            if (arr[i] < min){ 
        
                min = arr[i];
            }
            sum += arr[i];
        }
        return (sum - max - min) / (arr.length - 2);
    }
}

P99:static:应用知识-代码块

  • {}构造代码块(也称实例代码块),用的比较少,还是static {}静态代码块用得比较多,
  • 静态代码块 > 构造代码块 > 构造函数,且
  • 此代码块中只能写语句,不能写方法
  • 静态代码块的特点:如果要在对静态资源进行初始化,则建议使用静态代码块完成数据的初始化操作。

package d3_static_test;

public class StaticTestDemo3 { 
        
    // 成员变量
    private String name;
    private static int age = 10;

    // 构造函数
    StaticTestDemo3(String name){ 
        
        this.name = name;
        System.out.println("========构造函数construct=============");
    }

    // 构造代码块,执行于构造函数之前
    { 
        
        String name2 = "long";
        System.out.println(name2);
    }

    // 静态代码块 > 构造代码块 > 构造函数,只调用一次
    static { 
        
        age++;
        System.out.println("age =" + age);
    }

    // 方法
    public void print(){ 
        
        System.out.println(name + "的年龄是" + age);
    }


    public static void main(String[] args) { 
        
        StaticTestDemo3 test = new StaticTestDemo3("wu");
        StaticTestDemo3 test2 = new StaticTestDemo3("dan");

        test.print();
        test2.print();

        test.print();
    }
}

//age =11
//long
//========构造函数construct=============
//long
//========构造函数construct=============
//wu的年龄是11
//dan的年龄是11
//wu的年龄是11

package d3_static_test;

import java.util.ArrayList;

public class CardTest { 
        
    // 1.定义一个静态成员变量,一般使用public共享访问
    public static ArrayList<String> cards = new ArrayList<>();

    // 2.使用静态代码块,构造56张牌
    static { 
        
        // 点数
        String[] sizes = { 
        "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
        String[] colors = { 
        "♥", "♠", "♦", "♣"};
        for (int i = 0; i < sizes.length; i++) { 
        
            for (int j = 0; j < colors.length; j++) { 
        
                cards.add(sizes[i] + colors[j]);
            }
        }
        cards.add("小🃏");
        cards.add("大🃏");
    }

    public static void main(String[] args) { 
        
        System.out.println("新牌为:" + cards); // 在同一个类中,可直接使用静态成员变量
        System.out.println("新牌张数为:" + cards.size());
    }
}

// 新牌为:[3♥, 3♠, 3♦, 3♣, 4♥, 4♠, 4♦, 4♣, 5♥, 5♠, 5♦, 5♣, 6♥, 6♠, 6♦, 6♣, 7♥, 7♠, 7♦, 7♣, 8♥, 8♠, 8♦, 8♣, 9♥, 9♠, 9♦, 9♣, 10♥, 10♠, 10♦, 10♣, J♥, J♠, J♦, J♣, Q♥, Q♠, Q♦, Q♣, K♥, K♠, K♦, K♣, A♥, A♠, A♦, A♣, 2♥, 2♠, 2♦, 2♣, 小🃏, 大🃏]
// 新牌张数为:54

P100:static:应用知识-单例模式

  • 单例:就表示只能拿到一个类、构造器私有、需要内部创建一个静态实例共外部调用(根据实例的构造先后,依次分为饿汉、懒汉单例)

懒汉单例模式

P101:继承:概述、案例

P102:继承:特点、访问特点、方法重写

方法重写:

  • 子类重写父类方法时,,即方法修饰符、方法名、形参列表等全部都与父类一致,只是在函数体写明新的逻辑代码
  • 在需要重写的方法上一行,加上@Override注解,可以帮助校验重写方法的格式是否正确 + 提高代码的可读性

P103:继承:构造器特点、this、super小结

  • 调用父类无参构造器代码:super();
  • 调用父类有参构造器代码:super(name, age,...);

如果子类的构造器中没有调用super(name, age,...);,则默认都会自动调用super();。一旦有代码调用了super(name, age,...);,则不会再调用super();

P105:语法:包、权限修饰符

P106:语法:final的语法

  • public static final修饰的也常称为常量了

P107:语法:常量、常量在开发中的作用

P108:语法:枚举、枚举作用

  • 做信息标志和分类的代码可读性号,入参约束严谨,是最好的信息分类技术
  • 但是在实际应用中,可能是因为常量使用比较简单,使用常量的概率会高一些

P109:抽象类:概述、案例、特点

P110:抽象类:模板方法模式

P111:接口:概述、多实现、多继承

P112:接口新增方法、注意事项(了解)

P113:多态的概述,优势,类型转换问题

同类型的对象,执行同一个行为,会表现出不同的特征

类型转换问题

P114:多态综合案例

我的代码跟老师的不一样,老师还定义了一个电脑类,然后使用的installUSB,而我是直接定义在这个主代码里面了,emmm~

package d3_interface;

public class TestMain { 
        
    public static void main(String[] args) { 
        
        // 使用多态
        USB usb1 = new Mouse("罗技");
        USB usb2 = new Keyboard("联想");

        System.out.println("----------连接USB设备---------");
        usb1.on();
        usb2.on();

        System.out.println("\n----------使用USB设备---------");
        // 先判断数据类型,然后进行强制数据类型转换,并使用实现类的独有功能
        useUSB(usb1);
        useUSB(usb2);

        System.out.println("\n----------断开USB设备---------");
        usb1.off();
        usb2.off();
    }

    public static void useUSB(USB usb){ 
        
        if (usb instanceof Mouse){ 
        
            Mouse M_usb = (Mouse) usb;
            M_usb.click();
        }else if(usb instanceof Keyboard){ 
        
            Keyboard K_usb = (Keyboard) usb;
            K_usb.typewriter();
        }else{ 
        
            System.out.println("暂不处理~~");
        }
    }
}

P115:内部类

内部类的分类:

  • 静态内部类 [了解]
  • 成员内部类(非静态内部类) [了解,有点重要]
  • 局部内部类 [鸡肋,了解即可]
  • 匿名内部类(重点)

P116:匿名内部类(重点)

  • 匿名内部类的作用:简化代码编写
  • 一般的表现形式:作为方法的实参传输

P117:常用API-Object、Objects

  • 这两种方法都可以直接用IDEA的快捷键Alt+Insert生成

  • Objects.equals(a, b) 对象进行内容比较时,建议使用。因为会更安全、准确
  • Objects.isNull(a) 源码是 return a == null;

P118:常用API-StringBuilder

  • (先实例化一个对象StringBuilder sb = new StringBuilder();
    • 支持链式编程:sb.append("abc").append("123").append(3);
    • 反转 + 链式:sb.reverse().append("love");
    • StringBuilder只是拼接、操作字符串的手段:效率好
    • 最终还是要恢复成String类型进行后续操作:String s = sb.toString();

package StringBuilder;

public class TestMain { 
        
    public static void main(String[] args) { 
        
        int[] arr = null;
        int[] arr2 = { 
        };
        int[] arr3 = { 
        1, 2, 3, 4, 5};

        System.out.println(toString(arr));
        System.out.println(toString(arr2));
        System.out.println(toString(arr3));
    }

    public static String toString(int[] arr) { 
        
        if (arr == null) { 
        
            return null;
        } else { 
        
            StringBuilder sb = new StringBuilder("[");
            for (int i = 0; i < arr.length; i++) { 
        
                sb.append(arr[i]).append(i == arr.length - 1 ? "" : ", ");
            }
            sb.append("]");
            return sb.toString();
        }
    }

}
// null
// []
// [1, 2, 3, 4, 5]

P119:常用API-Math、System、BigDecimal

  • 作用:解决浮点数运算失真的问题
  • (一定要采用调用方法valueOf()去封装成BigDecimal对象)
    • 手段:封装浮点型数据为大数据对象 BigDecimal a1 = BigDecimal.valueOf(a);
    • 目的:转为double继续操作 double rs = a1.doubleValue();
    • BigDecimal是一定要精度运算的(因为有时候会遇到的情况,所以一定要指明精度)

❀❀❀❀❀❀❀❀❀❀❀❀❀

❀❀❀❀❀❀❀❀❀❀❀❀❀

(参考自👉代码规范:BigDecimal、int或者long进行精确数值计算)

float和double只能进行较为精确的快速近似的计算,并不能提供完全精确的结果,尤其不适用于货币计算,因为它们不能精确地表示0.1或者10的任何其它负次方。

要进行精确计算就使用BigDecimal、int或者long

package StringBuilder;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class TestMain2 { 
        
    public static void main(String[] args) { 
        
        System.out.println("-----------BigDecimal-----------");
        BigDecimal a = BigDecimal.valueOf(0.1);
        BigDecimal b = BigDecimal.valueOf(0.2);

        System.out.println( a + " + " + b + " = " + a.add(b));
        System.out.println( a + " - " + b + " = " + a.subtract(b));
        System.out.println( a + " * " + b + " = 

标签: p119举升传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台