JAVA 暑假复习

20210708-20210718

1 给属性赋值的两种方式?

        1 通过set()方法。

        2 通过含有这个属性的构造方法。

2 程序片段思考:

D:\idea-workplace\Test\src\javaa\daer\daershujia\D210708T01.java

D:\idea-workplace\Test\src\javaa\daer\daershujia\D210708T02.java

3 final:

表示不可变,最终的。

其修饰的类不能被继承;修饰的方法不能被覆盖、继承;修饰的变量不能被修改。

其修饰的引用对象不能重新指向其他对象,但对象内部数据可以被修改。

final修饰的的实例变量不会被系统初始化赋值,需要手动赋值(new时赋值)。

final修饰的实例变量常和static连用构成常量(常量名大写)。

4 程序片段思考:

D:\idea-workplace\Test\src\javaa\daer\daershujia\D210709T01.java

5 抽象类:

无法实例化,无法创建对象,用来被子类继承的(所以不能与final连用),被非抽象类继承必须将抽象方法全部覆盖(/重写)。

其子类依旧可为抽象类。

1 抽象类是半抽象的。

2 无法实例化,但其内有构造方法用来给子类实例化。

3 支持单继承。

super()调用父类的无参构造(调用不到则报错)。

抽象类中不一定有抽象方法,反之不然。

6 接口:   

尽量面向接口编程。

1 接口时完全抽象的。

2 其内没有抽象方法,只有抽象方法和常量,通常提取行为动作。

3 接口支持多继承(继承多个接口)。

继承和实现共存时,继承在前,实现在后。

其内的方法必须全加public与abstract(不能有方法体),所以可以省略不写;常量的static也可省略。

是一种引用数据类型。

类之间是继承,类和接口之间是实现。但仍是继承思想。

非抽象类实现接口时,要将其内所有抽象方法实例化(/覆盖/重写)。

7 强转:

无论是向上(/向下)转型都需要类之间有继承关系,但不适用于接口(没有关系的接口也能强转,但可能会出现异常)。

向下转型要加上instanceof判断类型。

8 程序片段思考:

D:\idea-workplace\Test\src\javaa\daer\daershujia\D210711T01.java

9 多态:/解耦合:

作用:1面向抽象编程。  2降低耦合度,提高程序扩展力。

解耦合:每一个接口都有实现者和调用者,接口可将两者关系解耦,调用者面向接口调用,实现者面向接口实现。

10 类之间关系:

 is a / has a / like a -->  extends / {  } (即关联) / implements

11 访问控制权限修饰符:

本类同包子类任意位置
public
protected
默认
private

范围从大到小排序:public--> protected--> 默认--> private 

12 equals / ==:

==  比较两个对象的内存地址(比较基本数据类型的数据)

equals 判断两个对象是否相等(比较引用数据类型的数据) (比较两个字符串时,使用equals,因为String类中重写了此方法)

13 匿名内部类

定义:再类内部定义的无名类。

分类:

        1 静态内部类:类似静态变量。

        2 实例内部类:类似实例变量。

        3 局部内部类:类似局部变量。(定义在类中的方法内部)

特点:可读性差,不能复用(因为无名不能多次调用)。

14 程序片段思考:

public class D210715T01 {
    public static void main(String[] args) {
        //new jisuan().jssumM(new MyMath3Impl(),1,2);
        /*...(){...}表达了对接口的实现*/
        new jisuan().jssumM(new MyMath3() {
            public int sumM(int num1, int num2) {
                return num1 + num2;
            }
        }, 1, 2);
    }
}
interface MyMath3 {
    int sumM(int num1, int num2);
}
//实现类
//class MyMath3Impl implements MyMath3 {
//    @Override
//    public int sumM(int num1, int num2) {
//        return num1+num2;
//    }
//}
class jisuan {
    public void jssumM(MyMath3 mymath3, int num1, int num2) {
        System.out.println(mymath3.sumM(num1, num2));
    }
}
//D:\idea-workplace\Test\src\javaa\daer\daershujia\D210715T01.java

15 数组:

1 本身为引用数据类型(所以存在堆内存中),其内可存放基本数据类型数据和引用数据类型数据(数据类型要一致)。

2 数组内数据的内存地址是顺序连续排列的。

3 存储的若是Java对象则是存储的内存地址(即对象的引用)。

4 一旦创建长度不能改变。

5 数组内存地址为第一个数据的内存地址。

6 每个数据都有下标并以0开始逐渐递增(存取时需要)。

特点:

(优点)查询元素的效率高(可以说最高的)。(因为:1 内存地址连续 2 元素类型相同即占用空间相同 3 可位移计算出下标 )

(缺点)1 增删元素效率低(因为地址连续会牵扯到下一个元素存放)(最后一个元素的增删效率无影响);2 不能存放大数据量(因为难开辟一块大的连续内存空间)。

7 动态/静态一维数组的正反遍历

/*数组正反遍历
 * 1 数组长度为末尾下标+1
 * 2 初始化数组的两种方式*/
public class D210716T01 {
    public static void main(String[] args) {
        int[] int1 = {1, 2, 2};//静态初始化数组
        for (int i = 0; i < int1.length; i++) {
            System.out.println("下标" + i + ":" + int1[i]);
        }
        System.out.println("--------");
        int[] int2 = new int[2];//动态初始化数组 2为数组长度
        for (int i = int2.length - 1; i >= 0; i--) {
            System.out.println("下标" + i + ":" + int2[i]);
        }
    }
}
/*D:\idea-workplace\Test\src\javaa\daer\daershujia\D210716T01.java
* 测试结果:
下标0:1
下标1:2
下标2:2
--------
下标1:0
下标0:0
*/

8 简易验证登录功能 

/*简易验证登录功能*/
public class D210718T02 {
    public static void main(String[] args) {
        loginM(new String[]{"sdf", "sdf"});
        loginM(new String[]{"admin", "123"});
    }

    public static void loginM(String[] args) {
        if (args.length != 2) {
            System.out.println("检查登录信息");
        } else if (args.length == 2 && args[0] == "admin" && args[1] == "123") {
            System.out.println("登录成功");
        } else {
            System.out.println("登录信息异常");
        }
    }
}
/*D:\idea-workplace\Test\src\javaa\daer\daershujia\D210718T02.java
运行结果:
登录信息异常
登录成功*/

9 一维数组的扩容

(数组长度确定后不可变)数组满后要扩容。

扩容:1 新建一个大数组  2 拷贝小数组到大数组中(此时小数组被垃圾回收)

特点:效率低(尽量不扩容/拷贝)(拷贝对象:实际拷贝的是对象的内存地址)

10 二维数组

是特殊的一维数组,其内每个元素是一个一维数组。(三维数组同理)

11 静态/动态二维数组的正反遍历

/*D:\idea-workplace\Test\src\javaa\daer\daershujia\D210722T01.java
静态/动态二维数组的正反遍历*/
public class D210722T01 {
    public static void main(String[] args) {
        int[][] ints1 = {
                {1, 2, 3},
                {4, 5, 6},
                {7, 8, 9}
        };
        int[][] ints2 = new int[3][3];
        for (int i = 0; i < ints1.length; i++) {
            for (int j = 0; j < ints1[i].length; j++) {
                System.out.print(ints1[i][j] + " ");
            }
            System.out.println();
        }
        System.out.println("---------");
        for (int i = 0; i < ints2.length; i++) {
            for (int j = 0; j < ints2[i].length; j++) {
                System.out.print(ints2[i][j] + " ");
            }
            System.out.println();
        }
    }
}

16 

其他:

1 包名命名规范:公司域名倒写+项目名+模块名+功能名。

2 Java.lang包下不用经过导入就可使用。

3 API:即Java的应用程序编程接口,整个jdkd的类库就是一个javase的API,每个API都配一套API帮助文档。

4 static{ ...  } :此为静态代码块,在类加载时执行且只执行一次。

5 UML:统一建模语言(画图的),面向对象的编程语言都可用UML。 

   可描述类之间的关系,程序执行流程图,对象的状态。(Java开发人员需要做到看懂。)

6 重写后的方法不能比之前的方法抛出更多的异常。

20210719-20210729

异常

1 异常以类和对象的形式存在。

2 异常的分类

Exception(可处理的)下的分支{

        1 Exception下的直接子类叫编译时异常(/受检异常/受控异常)。(编译时异常在编译阶段发生吗?不,其表示在编译阶段要预处理的异常,否则编译器报错。)

        2 RuntimeException下的子类叫运行时异常(/未受检异常/非受控异常)。(其可在编译阶段处理,也可不处理。)

        /*特点:

        (编译时异常)发生概率高;(运行时异常)发生概率低。

        两种异常都在运行时报错(因为运行时才可new对象),但编译时异常不预先处理编译就不通过*/

}

Exception(可处理的)的同级分支---- Error(不可处理的,直接退出JVM),两者共同的向上级为Throwable。

3 两种处理方式

上抛:在方法声明的位置使用throws抛给上级调用者。(注意:1 最终抛给main-->jvm,此时就只能终止执行(所以不建议在main上使用throws)。2 上抛时其方法内之后的代码不执行)

捕捉:try ... catch  {

注意:1 try中某一行异常则其后代码不执行,捕捉异常后才能执行。

            2 catch可写多个(但必须从小到大,每个catch精确处理一个问题,便于调试)。

            3 finally:其内代码最后执行且一定执行(无论是否有异常出现),但退出jvm后不执行。

                            必须和try一起出现,不能单独出现。可以出现try  ...  finally没有catch情况。

            4 try... catch ... 下的代码执行不到。

            5 catch后多个异常比直接Exception效率高。

}

4 两种方式怎么选? 希望调用者处理则上抛(throws),其他捕捉。

5 异常中的两个方法?

 try {
      temperature.getTemperature(39);
 } catch (HotException e) {
      System.out.println(e.getMessage());//获取异常的描述信息
      /*e.printStackTrace();打印异常追踪的堆栈信息*/
      /*查看异常堆栈信息时,从上往下逐行看自己编写的代码(用包名判断是否自己的代码)(sun编写的没问题)*/
 }

6 final finally finalize的区别?

final:关键字。修饰的类/方法/变量无法被继承/覆盖/重新赋值。

finally: 关键字,如上。

finalize: 标识符,一个方法名。

7 自定义异常:

8 空指针异常:判断变量是否为null时, “null==变量”  此形式更好,方式写  “变量==null”  时误写 “变量=null”  而赋变量值为null。

9 finally 与  return共存时

10 退出jvm后finally不执行

20210730-20210810

JS 

1 什么是JavaScript?

用于开发交互式的web页面,内嵌于HTML网页中。

HTML、CSS、JavaScript分别代表了结构(网页的骨架)、样式(网页的外观)、行为(网页的交互逻辑)。

比较三者:

HTML        结构        从语义的角度,描述页面结构

CSS        样式        从审美的角度,美化页面

JavaScript        行为        从交互的角度,提升用户体验

2 js特点:

        1 是脚本语言( 脚本即是一条条文本命令,按照程序流程执行)。

        脚本语言和非脚本语言的特点:

        脚本语言{ 依赖于解释器,只在被调用时自动进行解释或编译。特点: {1 简单 2 易学 3 易用 4 语法规则灵活 5 执行效率慢。} }  

        非脚本语言{ 需要经过编译-->链接-->运行,生成可独立的可执行文件后才能运行。} 

        2 可跨平台(因为此语言不依赖操作系统,仅需浏览器的支持,且几乎所有浏览器都支持此语言)。

        3 支持面向对象。

3 开发工具

主要包括浏览器(用于执行,调试代码)和代码编辑器(用于编写代码)两种软件。

浏览器内核(浏览器分类依据):1排版引擎 { 负责将取得的网页内容(如Html,css等)进行解析和处理,然后显示到屏幕中。(其中Gecko,火狐浏览器使用的引擎,源代码完全公开。)} 2 JavaScript引擎 { 用于解析JavaScript语言,通过执行代码来实现网页的交互效果。}

代码编辑器之间比较:

Notepad++        免费开源,小巧。

Sublime Text        轻量级的代码编辑器,跨平台,插件机制可扩展强,具有良好的用户界面,支持检查,书签,自定义按键绑定等功能。        

NetBeans

HBuiler        具有较全的语法库和浏览器兼容数据

Dreamweaver        所见即所得的网页编辑器,但可视化编辑功能会产生大量冗余代码,不适合开发结构复杂,需要大量动态交互的网页。

WebStorm        JavaScript,HTML5是强项。

4 js语法规则:

        1严格区分大小写

        2 对空格,换行,缩进不敏感。

        3 每条语句结束后 " ;"可以省略,但为了良好的代码风格不能省略。

5 js引入方式:

        1 嵌入式:使用<script>标签包裹js代码嵌入到HTML文件中。

        2 外链式:js代码单独保存在.js形式的文件中,再使用<script>的src属性引入文件。

        3 行内式:

其他:

1 在编码格式中,BOM是指字节数序标记,会在文件头部占用3个字节,用来标识文件的编码格式(Html网页不需要标识编码)。

2 js常放在头标签/体标签中。

疑问:

1 node.js        2 ES6         3 轻量级        4 HTML修改文件编码        5 (java)深浅克隆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值