zoukankan      html  css  js  c++  java
  • Java课堂笔记

    10.13Java课堂笔记

    数组

    二维数组

    声明:

    类型 [ 行 ] [ 列 ] 数组的名字

    		///直接为每一维分配内存空间
    		int [][]a = new int [2][3];
    		///分别
    		int [][]b = new int [2][];
    		b[0] = new int[3];
    		b[1] = new int[2];
    

    二维数组可以静态初始化,内存不是连续分配,所以每一维长度不一定相等

    引用时,要给出两维的下标,比如:

    b[1][1];
    

    另外数组下标从0开始,遍历的时候要注意不能大于等于length;

    Java中含有 java.util.Arrays 类,能方便进行数组操作;

    fill 给数组元素负值

    sort 升序排序

    比较数组时可以使用equals

    binarySearch 二分查找

    搜索
    查询元素出现的位置
    需要注意的是,使用binarySearch进行查找之前,必须使用sort进行排序
    如果数组中有多个相同的元素,查找结果是不确定的

    clone 可以克隆数组

    匿名数组

    可以作为现用现写

    增强for循环

    可以遍历数组,也可以遍历集合

    for(type name: 集合名) {
    
    }
    

    迭代变量必须在()中进行

    类似C++中的 iterator 迭代器,不会出现数组越界的问题

    ※ 不能再增强for循环中给数组赋值

    要想初始化要用普通的for循环来解决

    二维数组怎么通过增强for循环实现输出 ?

    int [][] arr = {{1,2},{3,4},{5,6}};
    for(int [] row : arr) {
        for(int j : row) {
            System.out.println(j);
        }
    }
    

    使用for 循环对数组元素进行复制,要考虑到目标数组大小

    System.arrary.copy 可以对数组进行拷贝

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OTKdBw6v-1609761105596)(C:UserswuyanAppDataRoamingTypora ypora-user-imagesimage-20201016104735416.png)]

    错误的赋值方式:

    int [][]num = new int[3][];
    num[0][0]= 1;
    num[0][1]= 2;
    num[1][0]= 0;
    

    字符串

    双引号包裹着的一串字符:

    “hello,world” "123.435"等

    字符串存储在char 类型的数组中,一个字符占两个字节

    String s1 = new String();
    char[] a = {'b','o','y'};
    

    常量字符串创建后会存储在字符串常量池中——享元模式

    不提倡的创建字符串常量的方式

    String s = new String("xyz");

    字符串中常用的API

    https://www.cnblogs.com/qiuqiu001/p/7806725.html

    https://www.cnblogs.com/caigq/archive/2017/06/11/6985974.html

    public int compareTo(String S)

    当前字符串与S相同, 返回0,大于 正值,小于 负值

    比较时采用Unicode来进行比较,字典序

    如果不想区分大小写的时候可以使用 equalsIgnoreCase

    字符串对比

    问题描述
      给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:
      1:两个字符串长度不等。比如 Beijing 和 Hebei
      2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing
      3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing
      4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing
      编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。
    输入格式
      包括两行,每行都是一个字符串
    输出格式
      仅有一个数字,表明这两个字符串的关系编号
    样例输入
    BEIjing
    beiJing
    样例输出
    3

    Code:

    package shifengshou;
    import java.util.Scanner;
    public class Main {
    	public static void main(String[] args) {
    		
    		//字符串对比
    		Scanner in = new Scanner(System.in);
    		String s1 = in.next();
    		String s2 = in.next();
    		
    		
    		if(s1.length() != s2.length())
    		{
    			System.out.println("1");
    		}
    		
    		else
    		{
    			if(s1.equals(s2))//区分大小写的判断
    			System.out.println("2");
    			
    			else if(s1.equalsIgnoreCase(s2))//忽略大小写的判断
    			System.out.println("3");
    		}
    	}
    }
    

    getChar() 获得字母

    subString() 字符串截取(注意函数值的问题)

    concat字符串拼接

    isEmpty()判断是否非空""注意和 isBlank() 的区别关系

    indexOf(String s);

    indexOf(String s,int startpoint);

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s46E1Shp-1609761105599)(C:UserswuyanAppDataRoamingTypora ypora-user-imagesimage-20201016113748110.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6sPwWQiU-1609761105600)(C:UserswuyanAppDataRoamingTypora ypora-user-imagesimage-20201016114004045.png)]

    10.22java课堂笔记

    substr截取字符串左闭右开

    public static void main(String []args) {
    		//System.out.println("hello world");
    		Scanner cin=new Scanner(System.in); 
    		String s1 = new String();
    		s1 = cin.nextLine();
    		int pos = s1.indexOf('@');
    		int len = s1.length();
    		String a = new String();
    		String b = new String();
    		a = s1.substring(0, pos);
    		b = s1.substring(pos+1,len);
    		System.out.println(a);
    		System.out.println(b);
    	}
    

    API

    format方法,可以创建一个格式化的字符串

    字符串转换为整型

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F3UkIX7V-1609761105602)(C:UserswuyanAppDataRoamingTypora ypora-user-imagesimage-20201022101512908.png)]

    字符串转换为浮点型

    Float.parseFloat();

    Double.parseDouble();

    数值转换为字符串

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AmVAGW0k-1609761105603)(C:UserswuyanAppDataRoamingTypora ypora-user-imagesimage-20201022101949282.png)]

    工厂方法:

    可以将任何对象任何基本类型转换为字符串

    String.valueOf()

    字符串与字符、字符数组

    String (char[]);

    字符串与字节数组

    getByte("编码方式");

    StringBuffer

    可以创建能够进行修改的字符串序列,该对象实体的内存空间可以自动改变大小,便于存放改变大小的字符串

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9wiVHilp-1609761105605)(C:UserswuyanAppDataRoamingTypora ypora-user-imagesimage-20201022103820971.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4V7Xz9FQ-1609761105606)(C:UserswuyanAppDataRoamingTypora ypora-user-imagesimage-20201022103933078.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GdU8vTIK-1609761105607)(C:UserswuyanAppDataRoamingTypora ypora-user-imagesimage-20201022104121123.png)]

    基本类型数据的类包装器

    java对所有基本数据类型都在java.lang包提供了对应的包装类

    Double类的构造方法:

    Double(double num1)/Double (String num1)

    静态工厂方法:

    valueOf(double d);

    valueOf(string d);

    Character类:

    构造方法:Character (char c);

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AWlvrxa7-1609761105608)(C:UserswuyanAppDataRoamingTypora ypora-user-imagesimage-20201022105517712.png)]

    装箱和拆箱:

    装箱

    Interge int1 = 55; 或者是

    int i = 3;

    Interage int2 = i;

    拆箱

    注意:

    防止没有初始化就使用的空型情况;

    java编程要尽可能使用工厂方法

    正则表达式与模式匹配

    一个含有特殊意义字符的字符串称为正则表达式(模式),特殊字符称为元字符

    比如说:"\dok" 中的\d 就是元字符,代表从0–9的任何一个数

    模式匹配:

    模式匹配就是检索和指定模式匹配的字符串

    java中提供了指定的类;

    在正则表达式中使用一堆方括号括起来的若干个字符,代表任意一个字符;

    方括号嵌套方括号可以构成交并差 &&并且 ^除了 - 到

    限定字符模式;

    模式的逻辑或

    模式匹配

    的情况

    10.23课堂笔记

    switch语句新特性

    改进1

    case 1->执行语句

    case 1->System.out.println(); 冒号改成箭头

    必须要有default

    case 1,2,3->执行语句

    改进2

    之前要先声明,然后再赋值改变变量大小

    int b = switch(a){
    	case 1,2,3-> 6;
        ...
        default-> 0;
    }
    
    int b = switch(a){
    	case 1:{
    		yield 1;///相当于return
    	}
        default-> 0;
    }
    

    "\s"空白字符

    封装

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gF7AyfFk-1609761105609)(C:UserswuyanAppDataRoamingTypora ypora-user-imagesimage-20201023103147070.png)]

    default:

    是一种默认的权限,仅能够用同一个包的方法进行访问

    protected :

    可以被这个类本身、它的子类(继承得到,同一个包中的以及不同包中的子类)和同一个包中的所有其他类访问

    (protected && default)跨包继承也要谨慎使用

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fZ5yNG7q-1609761105610)(C:UserswuyanAppDataRoamingTypora ypora-user-imagesimage-20201023103756916.png)]

    来源:https://www.cnblogs.com/sunyubin/p/9683860.html

    继承

    降低冗余问题,提高了可维护性

    extends 是继承的时候的关键字

    例子:

    class A{
    	
    }
    public class B extens A{
    
    }
    

    这里B将A继承

    public 为继承方式

    方法的覆盖

    重写override

    **子类拥有与父类相同的成员的情况称为覆盖(Override

    子类通过覆盖父类的成员变量和方法,可以把父类的状态和行为

    改变为自身的状态和行为。

    **成员变量的覆盖:**变量名相同

    **成员方法的覆盖:**返回值类型、方法名、形参都相同

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VjjHf6lA-1609761105611)(C:UserswuyanAppDataRoamingTypora ypora-user-imagesimage-20210104193541110.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TFNCfw36-1609761105612)(C:UserswuyanAppDataRoamingTypora ypora-user-imagesimage-20210104193613822.png)]

    通过super来实现对父类成员的访问

    继承中的 is a问题:cat is a animal

    A animal = new Cat();/// okay子类是父类的类型,这叫做上转型

    但是 Cat cat = animal;///就不行

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GA2MyHry-1609761105613)(C:UserswuyanAppDataRoamingTypora ypora-user-imagesimage-20210104193751708.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DLKnU5hN-1609761105614)(C:UserswuyanAppDataRoamingTypora ypora-user-imagesimage-20210104193817909.png)]

    强制类型转换

    多态

    提高系统可拓展性,可以拓展新功能

    是通过上转型(类型的向上转换,子类转换成父类)实现的多态

    如果不能确定对象的类型,类型强制转换之前先用instanceof确定对象的类型

    任务: 确定 instanceof的新用法:

    instance:实例的意思, A instanceof 可以用来判断A是不是B的一个实例

    在稳定的情况下实现新功能,依靠的是=>继承,上转型,方法的重写

    equals方法:

    判断两个基本数据类型的变量是否相等,比较两个对象的引用两个变量是否指向了相同的新变量

    10.30java课堂笔记

    instanceof新特性

    检查对象是不是指定的类型,通常在将父类引用强制转换为子类引用的时候使用

    抽象类

    封装、继承、多态、抽象是JAVA四大特性,不能明确描述的要进行抽象

    在某一层次,没有具体的状态,不能具体地进行描述,所以要进行初始化

    为了系统的可拓展性,就要进行抽象

    语法 abstract 修饰类、方法叫做抽象类,抽象方法

    抽象方法的好处是多态。

    抽象类除了被继承之外,没有别的用途

    如果一个非抽象类是某一个抽象类的子类,他必须重写父类中所有抽象方法!!!

    抽象方法只需声明,无需实现

    子类对抽象方法的重写,不能降低访问权限

    如何实现多态

    抽象可以屏蔽一切变化

    重要概念:接口

    一个类可以有多个接口。接口克服了单继承的缺点。

    接口不是类层次结构的一部分,接口可以看作是一种规则和约束。

    一个类在继承另一个类的同时,还可以实现多个接口

    声明接口 :

    具体使用interface

    page 113

    public interface interfaceName

    抽象方法当然定义格式 : returnType

    接口中方法默认使用public & abstract(可以省略)

    java中的implement

    接口回调(接口类型的使用)

    两种方法: 接口做上转型,接口做参数

    接口不是类,不能进行实例化一个接口,只能实例化它的实现类

    接口的默认方法(拓展方法)

    主要是提供一种拓展方法

    默认重写加上public,去掉default

    多级继承

    默认方法支持行为的多级继承

    类实现的优先级别高于接口的默认实现

    接口和抽象类的区别

    1.抽象层次

    2.建模关系

    3.设计层次

    尽量以interface取代abstract class

    interface 可以用来构建非层次类型框架,减少因继承带来的束缚

    继承与组合

    优先考虑继承,然后才是组合,因为继承破坏了封装性

    提倡在一个package中进行继承,跨越package的是不建议的

    面型对象的程序设计原则

    page 123

    11.13课堂笔记

    java中的异常问题:

    异常的的分类:

    img

    好博客

    RuntimeException以及Error 是非受查异常,CheckException 是受查异常

    java异常处理机制

    1.捕获异常

    try-catch-finally

    2.声明异常

    throws

    3.抛出异常

    throw

    抛出的异常必须是Throwable或者是其子类的实例才可以抛出异常

    Throwable中API的用法

    getMessage() && toString() 方法

    异常栈轨迹

    Final语句的问题

    final语句中抛出的异常以及跳转语句会覆盖try中抛出的异常

    避免使用final

    链式异常

    通过链式异常可以为异常关联另一个异常,第二个异常描述第一个异常的原因,称为引发异常或者是背后异常

    带有资源的try语句(io读取文件等)

    try with resources;

    更加精确的抛出异常

    隐匿异常对象的栈轨迹

    filllnStackTrace() 方法

    反射与注解

    反射:

    能够在运行时了解对象的一切信息,比如:父类型,方法,字段,构造方法等,还可以动态生成对象,改变权限

    这种结果就是通过反射得到的

    .class字节码文件

    java.lang.Class;

    字节码对象的创建:共三种方法

    Role.calss;

    对象.getClass();

    Class.forName("")

    class获取构造函数四个方法分两组

    详解博客

    在使用反射的时候,常用到的几个方法老是傻傻的分不清楚是干吗的,功能差不多的啊,
    比如:

    Class.getFields();
    Class.getField(String);
    Class.getDeclaredFields();
    Class.getDeclaredField(String);
    和
    Class.getMethods();
    Class.getMethod(String, Class[]);
    Class.getDeclaredMethods();
    Class.getDeclaredMethod(String, Class[]);
    

    主要的就是有没有Declared单词的区别,
    经过仔细研究有Declared单词的是获取的是某个类自己定义的成员,包括公开的,私有的,保护的等等的字段或方法,
    如果没有Declared单词的一般都是获取某个类所拥有的所有公开的成员,包括自己定义的和继承下来的公开成员,如公开的字段和继承的公开的方法.

    主要的就是有没有Declared单词的区别,
    经过仔细研究有Declared单词的是获取的是某个类自己定义的成员,包括公开的,私有的,保护的等等的字段或方法,
    如果没有Declared单词的一般都是获取某个类所拥有的所有公开的成员,包括自己定义的和继承下来的公开成员,如公开的字段和继承的公开的方法.

    先获取构造函数类型,在通过构造函数获取新的对象newInstance

    class…///泛型

    …表示不定长

    获取成员变量field

    获取任意指定名字的成员

    public Field getDeclaerFields();

    field封装的方法

    get();

    getInt();

    getShort();

    获取数组:

    数组容量动态调整

    11.19 java课堂笔记

    OCP原则

    抽象意味着一切皆有可能

    用对象组合代替继承

    内部类

    课本第118页

    面向对象的基石:抽象 abstraction

    静态内部类,非静态内部类,局部内部类,匿名内部类

    内部类可以定义为:abstract public private default protected,可以加入任意的访问权限

    内部类都是一个独立的类

    静态内部类只能访问内部类的静态变量或者是静态方法,非静态的不能访问

    可以实现顶层类的内部接口

    局部内部类

    在一个方法中实现,因此也叫方法内部类,不能用访问修饰符修饰

    局部内部类不能从方法外访问

    匿名内部类

    匿名类没有名字,只能用一次,出现在表达式的一条语句中

    new[类A OR 接口A()]{

    }

    得到的匿名类是类A的子类(可以继承A的成员或者是重写继承的方法),或者是实现接口A的类(在匿名类中实现接口的抽象方法)

    内部类可以很好地实现隐藏,降低外部耦合性,更好地实现封装性

    内部类拥有外围类的所有元素的访问权限

    实现多重继承,单继承之后的类再继承一个内部类,就可以实现多继承的效果

    避免修改接口而实现同一个类中两种同名方法的调用,用内部类去实现一个接口

    函数式编程

    lambda表达式

    8.0提出

    把函数作为参数进行传递

    ​ ©PushyTao

  • 相关阅读:
    SecureCRT安装
    wmv12下安装centos7
    SpringMVC(十二):SpringMVC 处理输出模型数据之@ModelAttribute
    oracle之 redo过高诊断
    oracle之 手动创建 emp 表 与 dept 表
    oracle之 11.2.0.4 bbed安装
    oracle12c之 控制pdb中sga 与 pga 内存使用
    storm之 Storm 工作原理
    spark之 spark 2.2.0 Standalone安装、wordCount演示
    hadoop之 参数调优
  • 原文地址:https://www.cnblogs.com/PushyTao/p/14507406.html
Copyright © 2011-2022 走看看