X16Mountain

导航

JavaStudy总结

总!

    1. 学习的整体框架:

      preview

    2. Java 定义了 4 种整数类型变量:字节型(byte)、短整型(short)、整型(int)和长整型(long)。

      常量:final 数据类型 常量名

    3. 重要规范:

      • {}大括号里要有四个空格的缩进
      • 函数和函数中间应该有一个空行 空一行
      • if和else即使只有一句话,也要加上{}
      • 类名首个单词的首字母大写StudentManager,一般是名词
      • 函数首个单词的首字母小写printStudentInfo(),一般以动词开头 驼峰命名法
    4. 强制类型转换:

      image-20220711105935597

    5. type

      1个字节=8位

      byte: 1个字节,不考虑负数能表示范围是:0255(2的八次方=256),考虑正负表示范围:-128127
      short:2个字节,16位 65536 0~65535
      int: 4个字节,考虑正负:-21亿~+21亿
      long:8个字节
      float: 4个字节
      double:8个字节
      char字符型:2个字节,采用的是Unicode编码每个字符在编码表里面都对应一个int整数
      Boolean: 只有true和false两种情况
    6. 数据类型转换:

      1、从小到大自动类型转换

      2、从大到小需要强制类型转换,可能会丢失精度

      byte->short(char)->int->long->float->double

    7. &&:两边的结果都是true,结果才是true

      ||:两边只要有一个是true,结果就是true

    8. 在程序运行前进行判断,若有非法输入,则使用:System.exit();

    9. 三目运算符号:语法:boolean ? 数1 : 数2。

  1. 数组:int[] array = new int[4];

  2. java.lang.Array Index OutOf Bounds Exception: 4

    数组下标越界异常(Index:bounds:边界 OutOf:超出 Exception:异常)

  3. 数组的排序:冒泡排序 (双重For循环)

  4. 快捷键集合笔记链接:D:\思途笔记\笔记\快捷键集合.md

  5. instanceof:是二元运算符

    instanceof是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。

  • OOP: Object Oriented Programming 面对对象编程

  1. 类和对象:抽象、封装、继承、多态

  2. 数据类型的默认值:

    int类型默认值是:0

    double类型默认值是:0.0

    boolean类型默认值是:false

    String类型默认值是:null

    int[]类型默认值是:null

    Student[]类型默认值是:null

    boolean[]类型默认值是:null

  3. 属性私有,通过get、set方法访问。

  4. 构造方法:

    特点:1、方法名和类名一样 2、没有返回值

    //无参构造方法

    //如果不写,Java默认提供这样一个无参构造方法.

    //如果你写了,Java就不会再提供这个无参构造方法

  5. this代表当前对象,把通过构造方法传递过来的值,赋值给当前对象的id。

继承,重载,重写,抽象,多态

  1. 你继承谁你就是谁,继承是一种严格的父子关系(在父类里面抽取的属性和方法一定是所有子类所共有)

  2. private:只在当前类里面可以访问(子类也不能访问)

    public:任何地方都可以访问

    protected:提高代码复用性。

    ![707_0 (1)](C:\Users\xuezihan123\AppData\Local\Temp\707_0 (1).png)

  3. super();

  4. 重载(overload):

    在同一个类里面,允许存在一个以上同名方法,只要他们参数类型和参数个数不同即可。

    同一个类中看同名方法的参数列表。(构造方法重载)

  5. 重写/覆盖(@Override):

    1、子类覆盖父类,必须保证子类权限大于父类权限才可以覆盖,否则会编译失败。

    2、如果父类是private的方法,子类是默认方法,那么子类是不知道这个方法的,不是覆盖。

  6. 多态:

    在子类中重写父类方法,在测试类中创建方法时,声明写父类 如Cal cal;

    image-20220713161349596

  7. 抽象类:

    1、抽象方法是没有方法体method),如果这个类里面有抽象方法,这个类必须变成抽象类。

    2、如果这个类是抽象类,并不要求这个类一定要有抽象方法

    3、抽象类里面可以有普通方法,也可以有抽象方法。

    4、如果一个类是抽象类,那么这个类就不能被new实例化,只能被其他类继承。

    5、抽象方法可以理解为父类(抽象类)定义的一个模板或者规范(自己本身不实现),子类必须实现这个抽象方法,如果子类不想实现这个方法,那么这个子类也必须要变成抽象类。

  8. 接口interface:

    1.接口是一个纯粹的抽象类(接口里面所有的方法都是抽象方法),接口里面的方法都是抽象方法 public abstract。

    2.接口里面所有的属性public static final

  9. 接口与抽象类的区别:🤕

    接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。另外,接口和抽象类在方法上有区别:

    ​ 1.抽象类可以有构造方法,接口中不能有构造方法。

    ​ 2.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

    ​ 3.抽象类中可以有普通成员变量,接口中没有普通成员变量

    1. 抽象类中的抽象方法的访问类型可以是public,protected和默认类型

    2. 抽象类中可以包含静态方法,接口中不能包含静态方法

    3. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型

    4. 一个类可以实现多个接口,但只能继承一个抽象类。

  10. final:(最终的意思)

final变量:这个变量就不能被修改,常量 ,接口里面: public static final double PI = 3.1415;

final类:这个类就不能被继承

final方法:这个方法就不能被重写

  1. static静态属性、静态方法:(经常被写成静态类Math,ArrayUtil)

    1、静态方法:如果一个static方法则最好使用【 类名 点 方法 】Student.print(),此静态方法属于这个类。静态方法中没有实例时,不能调用this super 。

    2、静态属性:

    3、静态的方法只能访问静态的方法和静态的属性(因为当前对象的实例可以没有创建,所以静态的方法是没办法调用非静态的方法和属性的)

    4、静态的方法中不能写this、super关键字(因为当前的对象实例可能还没有创建,代表当前类对象的this还有代表父类对象的super可能都还没有创建)

    5、非静态的属性和方法(实例属性和方法)必须通过new对象访问,而静态的属性和方法是属于类的,在类加载到内存中就可以访问,被所有对象所共享。

  2. String:

    • == 比较的是地址 equals 比较的是内容

    • s1 = "aBC";

    • s1 = "AbC";

    • s1.equals(s2); // false 不忽略大小写

    • s1.equalsIgnorecase(s2); // true 忽略大小写

  3. 常量池问题:

    701_0

  4. String API:

    startswith(String prefix/suffix) 以······开头 prefix 前缀 suffix 后缀

  5. String、StringBuffer、StringBuilder异同点:

    相同点:都是final类,都不能被继承。

    不同点:1、String长度是不可改变的,StringBuffer、StringBuilder长度是可变的。

    ​ 2、StringBuffer是线程安全(需要加锁,效率低)、StringBuilder是线程不安全(没有加锁,效率高)。

  6. 包装数据类型:

    Java是纯面向对象语言,int、double都是基本数据类型。

    int Integer

    char Character

    double Double

    long Long

    short Short

    boolean Boolean

    byte Byte

    定义全局的变量是用Integer ,局部方面的话

  7. 🆘Static静态代码块知识点笔记 ⭐

    链接:https://app.yinxiang.com/fx/31dc0cd8-c357-4674-b331-c77128ebd79e

  8. ArrayList LineList HashMap HashSet:

    Collecton接口常用的子接口有:List接口、Set接口

    List接口常用的子类有:ArrayList类、LinkedList类(链表)

    Set接口常用的子类有:HashSet类、LinkedHashSet类

    List允许有重复的元素,有序。

    Set不予许有重复元素,无序。

    17200016-b868ad987c4947ceb76c42b44887c783

  9. 值传递和引用传递:💖

    又错了的人来回答一下:

    String a = "a";

    String b = "a";

    这样定义的a和b指向的是字符串常量区变量,地址是一样的,即用equals为true,用==也为true。

    但是

    String a =new String( "a");

    String b = new String( "a");

    这样是定义了两个堆内存对象,只能equals,不能==

    例题:

    String s1=new String( ” xyz ” );

    String s2=new String( ” xyz ” );//在堆中建了两个“xyz”,不是同一个

    Boolean b1=s1.equals(s2);

    Boolean b2=(s1==s2);

    System .out.print(b1+ ” ” +b2);

    答案:

    TRUE FALSE

  10. image-20220715092234861

    synchronized是Java中的关键字,是一种同步锁。

    它修饰的对象有以下几种:

    1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;

    2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;

    3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;

    4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。

  1. 主键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一

    标识一条记录,该属性组就可以成为一个主键 。

  2. 外键:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外

    键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被

    称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。

  3. 字段属性设置:

    1、not null: 不为空,表示该字段不能放“null”这个值。不写,则默认是可以为空

    2、auto_increment: 设定int类型字段的值可以“自增长”,即其值无需“写入”,而会自动获得并增加

    此属性必须随同 primary key 或 unique key 一起使用。primary key = unique key + not null

    3、primary] key: 设定为主键。

    是唯一键“加强”:不能重复并且不能使用null,并且可以作为确定任意一行数据的“关键值”,

    最常见的类似:where id= 8; 或 where user_name=‘zhangsan’;

    通常,每个表都应该有个主键,而且大多数表,喜欢使用一个id并自增长类型作为主键。

    但:一个表只能设定一个主键。

    4、unique [key] : 设定为唯一键:表示该字段的所有行的值不可以重复(唯一性)。Duplicate entry 'zhangsan' for key 'name'

    5、default ‘默认值’: 设定一个字段在没有插入数据的时候自动使用的值。

    6、comment ‘字段注释’

  4. PRIMARY KEY 主键,不能重复,唯一确定一条记录 (unique+not null)

    AUTO_INCREMENT 自动增长

    varchar(10) char(10)区别:

    同点:都可以最大放10个字符

    不同点:char(10)不管输入的是多少都会占10个字符,例如输入名字“张三”只有两个字符,

    但是使用char(10)在数据库里面还是占10个字符的空间。

    使用varchar(10)最大支持是10个字符,但是实际长度就是输入字符长度,例如输入名字“张三”只有两个字符,

    那么在varchar(10)里面就只占两个字符。

  5. 联合主键:

    PRIMARY KEY(banji_id,course_id), -- 联合主键  
    
    FOREIGN KEY(banji_id) REFERENCES banji(id), -- banji_id既是联合主键又是外键  
    FOREIGN KEY(course_id) REFERENCES course(id) -- course_id既是联合主键又是外键);
    
  6. 多表查询:

    SELECT * FROM student WHERE banji_id=2;
    SELECT id FROM banji WHERE `name`='java1812';
    SELECT * FROM student WHERE banji_id=(SELECT id FROM banji WHERE `name`='java1812');
    
  7. inner join(关联查询):

    668_0

  8. select查询:group by之后使用having

    -- 4、查询该店每个栏目下挤压的货款 > 20000
    SELECT cat_id,SUM(goods_number*shop_price) AS total_price
    FROM goods GROUP BY cat_id HAVING total_price>20000;-- having
    
  9. 模糊查找:like

    1、like模糊查找用于对字符类型的字段进行字符匹配查找。

    2、要查找的字符中,有两个特殊含义的字符:% , _:

    ​ 2.1: %含义是:代表0或多个的任意字符

    ​ 2.2: _含义是:代表1个任意字符

    ​ 2.3: 这里的字符都是指现实中可见的一个“符号”,而不是字节。

    3、语法:like '%关键字%'

    SELECT * FROM student WHERE `name` LIKE '张%'; -- 以张开头
    SELECT * FROM student WHERE `name` LIKE '张_'; -- 以张开头,而且名字是两个字
    SELECT * FROM student WHERE `name` LIKE '%张%'; -- 名字里面只要有张就可以
    
  10. 分组查询:

  11. 范式

    第一范式原子性

    第二范式唯一性(消除非主键依赖联合主键中的部分字段)

    第三范式独立性,消除传递依赖(非主键值不依赖于另一个非主键值,都应该依赖于主键)

  12. 异常:

    • ArrayIndexOutofBoundsException 数组下标越界异常

    • NullPointerException 空指针异常

    • StringIndexOutofBoundsException 字符串下标越界异常

    • ArithmeticException 算数异常

    • ClassCastException 类型转换异常

    Image

    image-20220719091038345

    多重捕获块(多个catch)

    try {

    ​ 需要检测的代码(可能会抛出异常,也可能不会抛出异常)

    } catch (异常的类型1 异常类型的变量1) {

    ​ 捕获异常后处理异常

    } catch (异常的类型2 异常类型的变量2) {

    ​ 捕获异常后处理异常

    } catch (异常的类型3 异常类型的变量3) {

    ​ 捕获异常后处理异常

    } finally {

    ​ 一定会被执行的代码(不管异常抛不抛出都会执行,例如数据库释放连接)

    }

    自定义异常:

    1、所有的异常的都是Throwable的子类

    2、如果写一个运行时异常,需要继承RuntimeException

    3、如果要写一个编译时异常,继承Exception

    案例:模拟银行转账,可以实现存钱和取钱的功能取钱时候如果余额不够就抛出异常

    MeiQianException

  13. JDBC

    image-20220718160638014

  14. JDBC开发步骤:😵

    1、加载驱动Class.forName("");

    2、获得连接对象Connection

    3、写sql语句

    4、创建Statement(一艘船)

    5、执行sql语句

    ​ (1) 更新类(更改了表里面数据):delete/update/insert executeUpdate()

    ​ 返回值:int,表示你影响的行数

    ​ (2)查询(没有改变表里面数据): select executeQuery()

    ​ 返回值:结果集ResultSet6、关闭连接

  1. HTML:


      1.  
         &lt ; less than <  &gt great than > &copy &copy; 
             &lt; h1 &gt; 在HTML页面输出:<h1>
        

        table:

        th:table head

        tr:table row

        td:table data 单元格

        1. form表单:
      2. Css:

        语法:选择器 { 属性名1:属性值1; 属性名2:属性值2; 属性名3:属性值3; 属性名4:属性值4;}

        CSS使用:1、通过选择器选择上标签2、在选择的标签上设置样式

        选择器分类:标签选择器: p{}类选择器: .className{}id选择器: #id{}

        一些常见的样式:

        color:red; 文字颜色 font-size:40px; background-color:blue;

        text-decoration:underline;//下划线 text-decoration:none; //去掉下划线

        1. CSS高级选择器:(直接看代码)前三个重要

          s1 s2 后代选择器

          s1,s2 并集选择器(选择器组)

          s1s2 交集选择器(既满足选择器1也满足选择器2)

          s1>s2 直接儿子选择器,和后代选择器不一样

          s1+s2 下一个兄弟选择器,后面紧挨着的第一个兄弟

      3. 盒模型:

        盒子中主要的属性就5个:width、height、padding、border、margin。

        padding:内边距 margin:外边距

      4. border:就是边框。

        边框有三个要素:粗细、线型、颜色。

        实线:solid 点:dotted 虚线: dashed

        颜色如果不写,默认是黑色。另外两个属性不写,显示不出来边框。

        border是一个大综合属性:border:1px solid red;

        border属性能够被拆开,有两大种拆开的方式:

        1) 按3要素:border-width、border-style、border-color

        2) 按方向:border-top、border-right、border-bottom、border-left

      5. 什么是Bootstrap? 简洁、直观、强悍的前端开发框架,让web开发更迅速、简单。

      1. JS:解释型语言

        • 变量都用var,console.log();用来输出值。使用网页端的F12查看

        • DOM:

          元素节点的获取:document.getElementById( id属性值);document.getElementsByTagName("标签名");

        • 关系运算符:

          全等:===

          不全等:!==

          判断值是不是相等 ,还有类型是不是相等。

          Image

        • String和java一样使用:String常用的方法:

          1、大小写转换

          str.toLowerCase();

          str.toUpperCase();

          var str = "Hello jS!";

          console.log(str.toLowerCase());//hello js!

          console.log(str.toUpperCase());//HELLO JS!

          2、获取指定字符:

          str.charAt(index)

          返回指定位置的字符index:字符位置

          console.log(str.charAt(6));//j

          3、查询指定字符串出现索引

          str.indexOf(findstr, [index]);

          str.indexOf(findstr);

          str.indexOf(findstr,index);

          str.indexOf(findstr,[index])

          str.lastIndexOf(findstr, [index]);

          使用说明:

          findstr:查找的字符串index:开始查找的位置索引,可以省略

          返回findstr在x中出现的首字符位置索引,如果没有找到则返回-1

          lastIndexOf:从后面找起
          4、split() 方法用于把一个字符串分割成字符串数组。

          x.split(separator,howmany)

          separator : 字符串或正则表达式,从该参数指定的地方分割 stringObject

          howmany:指定返回数组的最大长度,可以省略返回分割后的字符串数组

        • Boolean

          Java中条件表达式必须返回布尔类型

          2<3

          JS中表达式可以是任意表达式.

          Image

          1107_0

          1不是0,就是非空值,表示true。

          在JS里面一切表示空的值都是false,非空的值都是true。

        • eval:

          console.log(eval('2+3')); //5

          eval('var x=10;var y=20;console.log(x*y);'); //200

        • innerText 直接当成一个字符串展示

          innerHtml 将内容当成html来解析

        • 数组:

          push pop 输入输出数据

      2. Servlet:

        • ​ 实现步骤:1、创建类继承HttpServlet 2、覆盖未实现的方法--service方法1146_0

        • JSP:

          Servlet的作用: 用java语言开发动态资源的技术!!!

          JSP的作用:用java语言(+html语言)开发动态资源的技术!!!

          JSP就是servlet!!!

          JSP的脚本:(脚本就是一段代码)

          语法:<%java代码 %>

          作用: 执行java代码

          JSP表达式:

          语法:<%=变量或表达式%>

          作用: 向浏览器输出变量的值或表达式计算的结果

      1. Servlet生命周期使用的方法:(面试会问)

        构造方法:创建servlet对象的时候被调用。默认情况下,第一次访问这个servlet的时候调用构造方法创建对象。

        构造方法只被调用一次,servlet对象在tomcat是单实例的。

        init方法:initial 创建完servlet对象时候调用。只调用1次。

        service:每次浏览器发出请求时候调用这个方法。调用n次。

        destroy:销毁servlet对象的时候调用。停止服务器或者重新部署web应用时候会销毁servlet对象。只调用1次。

      2. 给超链接添加点击事件并触发:

        1148_0

      3. Servlet中的Get和Post对比:

        1. Get:

          1、采用URL请求路径传输参数。参数拼接在URL后面。

          2、参数传输过程中隐私性较差,直接在URL后面。

          3、路径可以容纳的数据有限,只能传递少量参数。

          4、所有请求默认就是get。

        2. POST:

          1、采用实体内容传参数。

          2、参数在传输过程中不可见,隐私性好。

          3、实体内容专门用来传输数据,大小没有限制。

          4、使用:在form上加method="post"

        不管是Get方式还是POST方式传参数,后台代码获取参数的方式都是一样的。

        req.getParameter("name");

      4. 乱码问题解决:去网上搜

      5. 转发:(用于SelectAll的servlet)

        req.setAttribute("list", list);

        req.getRequestDispatcher("student_list.jsp").forward(req, resp);

      6. 重定向:(操作完成后返回之前的页面)

        一般添加、删除、修改之后重定向到:查找所有

        resp.sendRedirect(req.getContextPath() + "/student?method=selectAll");

        重定向的地址最终是由浏览器发送这个请求,浏览器只能定位到服务器上的tomcat,tomcat下面可能会有多个项目,无法确定是哪个项目,所以需要加上项目名。

        重定向:是服务器把这个请求地址告诉浏览器,然后浏览发送这个请求/JavaWeb/student?method=selectAll

        Image

      7. 前台往后台发请求方式:

        1、form表单

        2、超链接

        <a href="/JavaWeb/student?method=delete&id=1">删除</a>
        

        3、location.href

        4、ajax

      8. 总结以下:

        1. 建表,明确属性;

        2. Mysql可以使用工具类JDBCUtil。(包含连接数据库的静态方法,异常抓取和关闭全部链接connection之类的)

        3. 创建pojo文件,写清私有属性(和数据库对应好),set get方法写全;

        4. 明确对数据的操作,具体是什么如何实现,创建servlet文件,对应操作写方法。

          • 先创建值为空的connection,statement
        5. 写出对应的jsp,传值取值要注意。

          跳转到一个JSP页面有两种方式:

          1、浏览器直接请求这个JSP页面,一般这个页面不需要数据(查询页面等不需要输入的页面)
          2、先访问Servlet,然后转发到这个JSP页面,访问Servlet可以可以查询数据,放到req中,转发到JSP页面展示(最常用的方法)
      1. 使用到的SQL语句:select * from student LIMIT 0,5;(LIMIT offset, rows:分别表示偏移到哪个位置,rows表示往下数多少个数。)

        pageNo,pageSize 2,5 3,5

        limit (pageNo-1)*pageSize ,pageSize

        示例图:

        1153_0 1163_0
      2. 需要封装一个方法类PageInfo,作用是存储用到的数据,如:pageNo,pageSize,totalCount, totalPage

      3. 测试main函数:

        public static void main(String[] args) {
            int totalCount = 12;
            int pageSize = 5;
            int totalPage = (int)Math.ceil((double)totalCount / pageSize);
            System.out.println(totalPage);// 2
        }
        
      1. Cookie、Session、ServletContext

      2. 域对象:

      3. 过滤器filter与登陆:

      4. MVC

        Controller:完成接收的数据的封装(就是之前的servlet,不过少了数据库的那一部分)

        在此之前需要new一个service:

        private IStudentService studentService = new StudentServiceImpl();//类型是接口 new的是接口的实现
        

        image-20220725170926717

        Service和ServiceImpl:实现业务逻辑(举例分页的实现)

        public interface IStudentService {
            List<Student> selectAll();
            void deleteById(Integer id);
            void add(Student student);
            Student selectById(Integer id);
            void update(Student student);
        }
        
        public class StudentServiceImpl implements IStudentService {
            private IStudentDao studentDao = new StudentDaoImpl();
        
            @Override
            public List<Student> selectAll() {
                return studentDao.selectAll();
            }
        
            @Override
            public void deleteById(Integer id) {
                studentDao.deleteById(id);
            }
        
            @Override
            public void add(Student student) {
                studentDao.add(student);
            }
        
            @Override
            public Student selectById(Integer id) {
                return studentDao.selectById(id);
            }
        
            @Override
            public void update(Student student) {
                studentDao.update(student);
            }
        }
        

        Dao和DaoImpl:最基本的增删改查

        public interface IStudentDao {
            List<Student> selectAll();
            void deleteById(Integer id);
            void add(Student student);
            Student selectById(Integer id);
            void update(Student student);
        }
        
         @Override
            public void add(Student student) {
                Connection connection = null;
                PreparedStatement statement = null;
                try {
                    connection = JDBCUtil.getConnection();
                    String sql = "insert into student(name,age,gender) values(?,?,?)";
                    statement = connection.prepareStatement(sql);
                    statement.setString(1, student.getName());
                    statement.setInt(2, student.getAge());
                    statement.setString(3, student.getGender());
                    System.out.println(statement);
                    int count = statement.executeUpdate();
                    System.out.println(count);
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                } finally {
                    JDBCUtil.close(connection, statement, null);
                }
            }
        
      5. 4354635

      6. 45234

      7. 534

      8. 53243

      9. 55

      10. 43

      1. JS DOM

      2. JQuery

        toggle开关;若开则关,若关则开。

      1. Ajax
      • [x]

posted on 2022-07-27 11:50  X_16  阅读(66)  评论(0编辑  收藏  举报