JAVA学习笔记- - - day 3

简介: # 设计模式(重点)## 单例说明:这种模式只产生一个对象(只有一个实例)应用场景: windows资源管理器,java数据库中的连接池,网站的计数器,一般也是采用单例模式实现,否则难以同步。步骤:​ 1. 私有化构造参数​ 2. 定义一个类方法用于获得单例的对象​ 3. 在类中提供一个这个类类型的类属性(要用static修饰)​ 4. 在类方法中返回实例化的对象 # final## 修饰变量用final修饰的变量不能修改## 修饰在类属性上这个属性必须要初始化或者在构造

设计模式(重点)

单例

说明:这种模式只产生一个对象(只有一个实例)

应用场景: windows资源管理器,java数据库中的连接池,网站的计数器,一般也是采用单例模式实现,否则难以同步。

步骤:

         1. 私有化构造参数

         2. 定义一个类方法用于获得单例的对象

         3. 在类中提供一个这个类类型的类属性(要用static修饰)

         4. 在类方法中返回实例化的对象

final

修饰变量

用final修饰的变量不能修改

修饰在类属性上

这个属性必须要初始化或者在构造函数中赋值,如果有多个构造方法,那每个方法都要给这个final属性初始化

修饰在方法

final修饰的方法不能被重写

修饰在类上

不能被继承

继承(重点)

面向对象的三个基本特征: 继承、多态、封装

继承是描述两个类的关系,如果两个类有重复的属性和方法,我们就可以使用继承的方式来实现/设计。

语法:

      class 子类名称  extends 父类{

           属性名

           方法名

        }

1.继承中,子类会把父类的所有属性和方法都继承下来 ,包括static和final (除了私有的属性和方法)。

2.子类继承父类后,还可以拥有自己的属性和方法

3.子类只能获得父类的非private属性,private的方法也是不能继承下来的。

4.java中,只能单继承

super关键字

作用

          1.子类实例化的过程中,父类构造器先被调用,然后再调用子类的构造器(在子类构造器内部默认的调用super());

          2. 子类通过构造器实例化时调用了父类的默认构造器,是隐含的调用了super()这个方法,但是如果子类的构造器中调用了父类的有参构造方法,那么无参的构造器就不会被调用。不能在子类构造器中同时调用两次super()

  1. super()的调用要放在第一行
  2. super可以表示父类的引用,我们可以使用super和this来区分父类和子类的同名属性。在子类中访问属性的查找顺序首先在子类中查找指定的属性名,如果在子类中没有找到该属性。那么就去父类中去查找该属性。
    方法也是一样,当子类和父类拥有同样的方法时,通过子类调用这个方法时,调用的是子类的方法。但是我们通过super对父类的引用来调用父类的方法。

this代表当前类的指定实例的引用

方法的重写

重写(override): 在子类继承父类时,子类的方法和父类的方法相同(访问修饰限制符,返回值类型,方法名,参数列表),方法体不同。这种子类的方法将父类的方法覆盖叫重写(父类的方法不能满足子类的需求时,要重写 ,重写不代表消失,可以使用super来调用父类方法)

重载(overload): 同一个类中,有相同的方法名,但是参数的类型或者参数的个数不同,这两个方法就是重载。

父子类之间的类型转换

子类转成父类

  1. 如果子类对父类的方法有重写,并且子类的实例赋值给父类的引用,通过这个引用调用的方法是子类的方法。
  2. 父类指向子类实例的引用不能够调用子类的独有的方法和属性
  3. 如果父子类有同名的属性,那么父类指向子类实例的引用调用的属性是父类的属性,和方法不一样

父类转成子类

              1.父类转换成子类不能自动完成,需要强制转换。

              2.父类转成子类的前提是,原先这个父类的引用指向的就是子类的实例。这样就可以访问子类的独有属性和方法。

              3.子类之间不能互相转换(编译能通过,但是运行会报错)

抽象类(重点)

说明: 当多个类存在共同的行为,但是有不同的实现逻辑,这个方法可以使用抽象方法实现

定义:

        abstract  class 类名{

       }

使用:

   抽象类不能实例化,即不能创建对象,只能被继承,然后实例化。

   继承抽象类的非抽象类必须实现抽象方法。

   抽象类中可以没有抽象方法,有抽象方法的类一定是抽象类。

   抽象类可以继承抽象类,可以不用实现抽象方法。

   抽象的方法不能加private ,final,static修饰  

接口(重要)

说明

一个类所具有的方法的特征集合,是一种逻辑上的抽象。

说明:

  1. 接口中的方法不能使用private和final
  2. 接口不能实例化,需要有类来实现接口,并且实现接口的抽象方法。
  3. 接口中的方法默认就是抽象的
  4. 接口可以多继承,因为接口只定义行为,并不包含类别的含义,不指代具体的事物。
  5. 接口中可以定义常量,常量默认会带public static final。该常量不能修改。一般我们通过"接口名.常量" 来访问

方式:

    interface  类名称{


      }

和抽象类的区别:

  1. 一个类只能继承一个类,是单继承的,但是一个类可以实现多个接口
  2. 抽象类有实例变量,而接口只能有常量(static 修饰的变量)
  3. 接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。

jdk1.8的接口

1.在接口中定义static方法

2.在接口中定义默认方法

    default void 方法名称(){

   }

在 java 8 之前,接口与其实现类之间的耦合度太高了,当需要为一个接口添加方法时,所有的实现类都必须随之修改。默认方法解决了这个问题,它可以为接口添加新的方法,而不会破坏已有的接口的实现。

多态(重要)

多态的条件

  1. 子类对父类有方法的重写
  2. 父类的引用指向子类的实例,调用重写的这个方法的时候,调用的是子类的方法。

包(package)

类似文件夹,对类做分类管理,可以区分同名不同包的类

不同的包可以创建相同的类

扫描器Scanner(了解)

作用:

    扫描器的作用就是让我们运行程序的时候可以从控制台来输入数据.

Scannerscan=newScanner(System.in);

// 从键盘接收数据

 while(true) {

      System.out.println("nextLine方式接收:");

      // 判断是否还有输入

      if (scan.hasNextLine()) {

           Stringstr2=scan.nextLine();

           System.out.println("输入的数据为:"+str2);

         }

      }

 }

内部类

说明: 类内部的类就是内部类

        把一个类定义到另一个类中,那么这个就是内部类。

注意点:

         内部类不能直接创建,内部类的外部类如果要访问内部类的方法,必须创建内部类的对象,根据内部类的对象来访问。

创建内部类的语法:

       外部类.内部类 变量名 = new 外部类对象.new 内部类对象

特点:

     1.本类可以直接创建内部类对象

     2.内部类可以访问外部类的属性和方法。

       注意点:  内部类和外部类属性同名时: 内部类访问外部类方法: 外部类名称.this.外部类属性

匿名内部类

packagecom.mashang;

publicclassTest03 {

   publicstaticvoidmain(String[] args) {

       //匿名内部类

       Teacherteacher=newTeacher() {

           @Override

           publicvoidteach() {

              System.out.println("teach不知道什么课");

           }

           @Override

           publicvoidplay() {

              System.out.println("play 不知道什么游戏");

           }

       };

       teacher.teach();

   }

}

Object(重要)

说明:

       Object是所有类的根类,所有的类都是直接或者间接继承Object类的

toString()

            返回该对象的字符串表示。通常toString方法会返回一个"已文本方式表示" 此对象的字符串。结果应该是一个简明但易懂的信息表达式

hashCode()

由Object类定义的hashcode方法给不同的对象返回不同的整数

finalize()

用于垃圾回收,我们不用手动去调用,有JVM来调用,当垃圾回收器确定不存在该对象的引用时,由对象的垃圾回收器调用此方法

equals()(重要)

比较两个对象地址的值。自定义类重写equals用来比较这两个对象是否相等。



相关文章
|
6月前
|
Java 编译器 开发工具
Java基础学习笔记——idea篇
JDK由JRE(包含JVM和核心类库)和开发工具箱(如javac编译器和java运行工具)组成。Java项目结构包括Project、Module、Package和Class。IDEA快捷键包括:生成main方法(main psvm)、复制代码(Ctrl+D)、删除代码(Ctrl+Y/X)、格式化代码(Ctrl+Alt+L)、重命名(Shift+F6)等。
51 0
|
6月前
|
监控 负载均衡 Dubbo
|
3月前
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
从Java环境的搭建到实际代码的编写,从基本用法的讲解到底层原理的剖析,深度解析Java基础知识。本文是《Java学习路线》专栏的起始文章,旨在提供一套完整的Java学习路线,覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等全面的知识点,并在未来不断更新和完善,帮助Java从业者在更短的时间内成长为高级开发。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
本文是Java基础的进阶篇,对异常、集合、泛型、Java8新特性、I/O流等知识进行深入浅出的介绍,并附有对应的代码示例,重要的地方带有对性能、底层原理、源码的剖析。适合Java初学者。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
|
29天前
|
Java 数据安全/隐私保护
java学习笔记(基础习题)
java学习笔记(基础习题)
31 0
|
29天前
|
Java 程序员 开发工具
java学习笔记
java学习笔记
34 0
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)
本文是“Java学习路线”中Java基础知识的高级篇,主要对多线程和反射进行了深入浅出的介绍,在多线程部分,详细介绍了线程的概念、生命周期、多线程的线程安全、线程通信、线程同步,并对synchronized和Lock锁;反射部分对反射的特性、功能、优缺点、适用场景等进行了介绍。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)
|
3月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
53 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
3月前
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
105 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)