首页 > 编程语言 >Java期末知识点总结(不全)

Java期末知识点总结(不全)

时间:2024-01-17 20:49:25浏览次数:27  
标签:知识点 调用 Java 变量 子类 接口 期末 父类 方法

Java知识点

Lesson1 认识java

image-20231225222610440

Lesson2-3 认识对象:封装数据为类

1.类中有成员变量(属性/字段)+成员函数(方法),类是对象的模板/缔造者/抽象/类型

2.局部变量和成员变量的区别:

(1)定义位置不同:定义在类中的变量成员变量,定义在方法或{}中的是局部变量

(2)内存中位置不同:成员变量在堆内存的对象中,局部变量在栈内存的方法中

(3)声明周期不同

(4)初始化不同:成员变量有默认初始化值,局部变量没有初始值,必须手动赋值

3.方法重载:函数名称相同,但参数列表不同(可以是参数的类型、个数、顺序的不同)

(注意,与返回值不相干) 如果一个类中有两个同名方法,其参数列表完全一样,仅仅返回值类型不同,则编译时会产生错误

image-20231223175759580

5.构造方法:与类同名且没有返回值。构造方法可以重载。如果没有声明构造方法,系统会默认构造一个无参的构造方法。构造方法可以有多个。(重载)

6.类之间的关系:

image-20231223180924834

7.java每个类都默认地有null、this、super三个域,在任何类中都可直接使用。

this可以看作一个变量,他的值是当前对象的引用;在类的方法定义中使用this代表使用该方法的对象的引用;使用this可以处理方法中成员变量和局部变量重名的问题。

this的用法:引用自身对象的成员变量this.age; 引用自身对象的成员方法this.diaplay();调用自身的构造方法this(“Jack”,Male,10);

super的用法:引用父类对象的成员变量super.age;引用父类对象的成员方法super.diaplay();调用父类的构造方法super(“Jack”,Male,10);

image-20231226165941420

Lesson4 封装

1.java的访问控制分4种级别:

  • 私有级别:用private修饰,只有类本身可以访问
  • 默认级别:没有修饰符,对同一包中的类公开
  • 受保护级别:用protected修饰,向同一个包中的类以及子类公开
  • 公开级别:用public修饰,对外公开

2.单例模式

  • 一个类只有一个实例(对象)存在,该类一般没有属性。无法继承(因为构造方法private),无法扩展,无法更改他的实现。

  • 一般有公共静态方法getInstance用于获得实例(注意是静态方法不是实例方法)

  • 使用条件:只需要使用一个单独的资源且需要共享这个资源的信息;需要频繁创建销毁的对象等

  • 饿汉式:JVM加载类时就创建实例

    public class Singleton{
    	//静态的,保留自身的引用。类加载时就初始化
    	private static Singleton test = new Singleton();
    	//必须是私有的构造函数
    	private Singleton(){}
    	//公共的静态的方法
    	public static Singleton getInstance() {
    		return test;
    	}
    }
    
  • 懒汉式:第一次需要的时候才创建实例

    public class Singleton{
    	//静态的。保留自身的引用。
    	private static Singleton test = null;
    	//必须是私有的构造函数
    	private Singleton(){}
    	//公共的静态的方法。
    	public static Singleton getInstance() {
    		if(test == null)
     			test = new Singleton();
     		return test;
    	 }
    }
    

Lesson5 继承(重点:子类构造器、protected、向上转型)

1.继承虽好,但也破坏了封装性。子类(派生类)拥有父类(基类/超类)的【所有属性】和方法(不过私有的属性和方法不能直接访问),不能继承构造方法Java中所有类共同的基类是Object类。

2.子类构造器

构造器的调用顺序

子类的构造器在创建对象时会首先调用其直接父类的构造器,然后再执行自身的构造器。

使用super调用父类构造器:

  • 在子类的构造器中,可以使用 super 关键字来调用父类的构造器。
  • super() 必须是构造器中的第一条语句。
  • 如果子类构造器没有显式调用 super(),那么默认会调用父类的无参构造器。
  • 父类有参构造器必须通过 子类构造器的super(...) 调用。

3.protected

image-20231226173735466

4.向上转型

  • 将子类转换成父类,称之为向上转型或者向上映射。由于向上转型是从一个较专用类型向较通用类型转换,所以它总是安全的。

  • 只能调用父类中定义的属性和方法。

  • 变量隐藏:子类的成员变量和父类的成员变量同名,此时称子类隐藏了父类的成员变量。

  • 方法覆盖(重写):子类函数原型与父类完全一样(名称、参数、返回值全一样);子类方法不能缩小父类方法的访问权限,子类权限要大于等于父类。

  • 方法隐藏:私有方法、静态方法不能被覆盖,这时如果子类有相同方法,就是方法隐藏

final方法也不能被覆盖(重写)

怎么看调用:

覆盖:实例化是谁,就调用谁

隐藏:引用类型是谁,就调用谁

image-20240104213311849

Lesson6-7 多态(多态、抽象、工厂模式、接口、向上向下转型)

1.java引用变量的两种类型,编译时类型:由声明该变量时使用的类型决定;运行时类型:由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现多态。

2.静多态:发生在编译时,一般指方法重载。(与继承无关)

动多态:发生在运行时,一般指动态调用方法。在编译时不能确定要调用的方法,运行时才能确定。

3.实现动多态有3个条件:继承、覆盖、向上转型,缺一不可。继承是首要前提。

4.抽象

  • 关键字abstract表示“尚未实现”的含义。可以修饰类或者方法。抽象方法没有方法体。
  • 抽象类可以没有抽象方法,但抽象方法必须在抽象类里。如果一个类继承某个抽象父类,但没有具体实现父类的抽象方法,则必须定义为抽象类。(抽象方法必须在子类实现【是一种覆盖】,除非子类也是抽象类)
  • 抽象类是不能实例化的,但可以创建它的引用。

5.工厂模式

6.接口:

  • 通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。
  • 接口是一种特殊的抽象类。因此实现接口要实现所有方法。只实现部分方法时,要把类设置成抽象类。
  • 接口中没有构造方法
  • 接口方法默认是public abstract的,类在实现接口方法时,必须显示使用public修饰符
  • 接口变量默认是public static final的。
  • 接口可以多重继承。

7.向上和向下转型(向上是自动的,向下是强制的)

  • 上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的实例方法。

  • 上转型对象不能操作子类新增的成员变量,不能调用子类新增的成员方法。

  • 一个已经向上转型的子类对象可以强制类型转换,将父类引用转为子类引用,这就是向下转型。

  • 当要使用子类特有功能时,就需要使用向下转型,调用子类特有的功能。向下转型不安全,可以用instanceof来避免运行时错误(向下转型出问题时编译是不报错的)。

  • instanceof:左边是一个引用类型的对象,右边是类名或者接口名。判断一个引用类型所引用的对象是否是一个类的实例。

    image-20240105110143200

Lesson 8 完善类的设计

1.equals和==

  • 比较对象的equals和==是等价的,判断是不是引用的同一个对象。

  • String的equals只看字符串内容是否相等,而==还得看是不是同一个对象。

image-20240105130245843

2.内部类

适用于只能系统中的某一个类访问;此外,如果某一个内部类仅仅为特定的方法提供服务,那么可以把内部类定义在方法之内。可见,内部类是一种封装类型的有效手段。

内部类的一个特点是能够访问外部类的各种访问级别的成员

  • 实例内部类:在创建实例内部类的实例时,外部类的实例必须已经存在

    Outer.InnerTool tool=new Outer().new InnerTool()

    等价于Outer outer=new Outer&Outer.InnerTool tool=outer.new InnerTool()

    实例内部类可以直接访问外部类的所有东西。

  • 静态内部类:创建实例时不必创建外部类的实例。

  • 局部内部类:只能在当前方法中使用,可以访问外部类的所有成员;还可以访问方法中的final或最终变量。

顶层类只能是public或默认访问级别的,内部类四个访问级别都可以。

3.匿名类

匿名类就是没有名字的类,是将类和类的方法定义在一个表达式范围里。

Lesson11 集合框架

1.概述:

  • 所有集合类都在java.util包下,java集合类主要由Collection和Map派生来,她们是根接口
  • 集合框架的3大组成部分:接口、实现、算法。可以细化为4部分:数据结构、比较器、算法、迭代器。
  • 集合类只容纳对象。

2.Collection接口

Collection 接口是 List、Set 和 Queue 接口的父接口,该接口里定义的方法既可用于操作 Set 集合,也可用于操作 List。

Set接口:

  • Set中的元素必须唯一。添加到Set的元素必须定义equals函数,从而保证元素的唯一性。
  • 实现Set接口的类有HashSet和TreeSet
  • TreeSet自动排序,不允许插入null;HashSet是无序的,只能允许放一个null

List接口:

  • 元素都有确定的顺序,且可以重复。但不会自动排好序。
  • List的实现类有ArrayList和LinkedList
  • ArrayList是可变长度数组,遍历、随机访问效率高;LinkedList是链表,插入删除效率高。

3.Map接口

Map接口专门处理键值对映射数据的存储,key唯一,value可以重复。key不能修改。

子类TreeMap关于key有序,子类HashMap无序。

image-20240105124057524

4.Collections工具类

Lesson12 文件与数据流

Lesson13 多线程

1.多线程的实现

通过继承thread或者实现Runnable接口来实现多线程。

Thread类简单易用,但java不支持多继承,因此有局限性。

Runnable可以避免单线程的限制,由于可以将 Runnable 对象传递给 Thread 对象,因此可以更好地分离线程的任务和线程本身,但编码较复杂。

2.sleep和yield的区别

sleep()使线程转入阻塞状态,而yield()使线程转入runnable状态

yield()给相同优先级或更高的线程运行机会,如果当前没有存在相同优先级的线程,则yield()什么都不做。

sleep()不会考虑线程的优先级。

3.wait、notify、notifyall

wait,nofity,notifyAll必须在已经持有锁的情况下执行,所以它们只能出现在synchronized作用的范围内,也就是出现在synchronized修饰的方法中。

wait的作用:释放已持有的锁,进入等待队列.

notify的作用:随机唤醒wait队列中的一个线程并把它移入锁申请队列

notifyAll的作用:唤醒wait队列中的所有的线程并把它们移入锁申请队列

Lesson14 网络

image-20240105144224609

image-20240105144450967

标签:知识点,调用,Java,变量,子类,接口,期末,父类,方法
From: https://www.cnblogs.com/Wild-sunflower/p/17971124

相关文章

  • 入门Linux运维工程师需要掌握的知识点和工具以及技能
    Linux系统的学习,可以选用redhat或centos,特别是centos在企业中用得最多,当然还会有其它版本的,比如Ubuntu等,根据自己的工作情况和兴趣来定。当然不同发行版本主要是包上的区别以及一些命令的差异,其他内核上的东西都大同小异。对于刚入门或准备入门Linux运维的来说,整理总结了以下10个......
  • Java基础知识整理,驼峰规则、流程控制、自增自减
    写在开头本文接着上一篇文章续写哈。[Java基础知识整理,注释、关键字、运算符](https://blog.csdn.net/qq_43506040/article/details/135633325)在这一篇文章中我们总结了包括注释、关键字、运算符的Java基础知识点,今天继续来聊一聊命名规则(驼峰)、流程控制、自增自减。一、命名......
  • aigc java接口
    AIGCJava接口科普简介AIGC(ArtificialIntelligenceGeneralControl)是一种人工智能通用控制接口,提供了与各种人工智能算法进行集成的能力。在Java编程语言中,我们可以使用AIGCJava接口来实现与AIGC的交互。本篇文章将向您介绍AIGCJava接口的使用方法,并提供代码示例来帮助您更......
  • copilotjava
    使用Copilot生成Java代码介绍Copilot是一款由GitHub开发的人工智能代码生成工具,可以帮助开发者更高效地编写代码。在本文中,我将向你介绍如何使用Copilot生成Java代码。无论你是一名经验丰富的开发者还是刚入行的小白,都可以从本文中学习到如何使用Copilot提升你的开......
  • java api开发stable diffusion
    JavaAPI开发StableDiffusion教程1.概述在Java开发中,API(ApplicationProgrammingInterface)是非常重要的一部分。通过API,我们可以使用现有的库、框架或者服务,实现所需的功能。本文将详细介绍如何使用JavaAPI进行StableDiffusion开发,帮助刚入行的小白快速上手。2.整体流程f......
  • Flink Java Demo
    1.新建Maven项目<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://......
  • Java异步编程详解
    在现代应用程序开发中,异步编程变得越来越重要,特别是在处理I/O密集型任务时。Java提供了一套强大的异步编程工具,使得开发者能够更有效地处理并发任务。本篇博文将深入探讨Java中异步编程的方方面面,通过具体例子详细说明异步编程的实践。异步编程的背景在传统的同步编程模型中,任务......
  • 利用javascript获取并修改伪元素的值
    HEAD中添加style标签强制覆盖初始属性这个方法是利用内部css样式的高优先级来覆盖外部css,好处是简单易理解,实现简单。坏处就是吃相太难看,过于粗暴。varstyle=document.createElement('style');style.innerHTML=".test::before{color:green}";//添加样式内容的话也可以用上面提......
  • java继承
    java三大特征:封装、继承、多态封装:对象代表什么就得封装什么样的数据,并提供数据对应的行为。继承java中提供了一个extends关键字,用这个关键字可以让一个类和另外一个类建立起继承关系publicclassStudebtextendsPerson(){}例如上段代码中,Student类就叫子类(派生类),Person......
  • 【从零开始重学Java】第13天 Java网络功能
    前情提示从零开始重学Java第0天从零开始重学Java第1天Java概述从零开始重学Java第2天标识符和数据类型从零开始重学Java第3天表达式和流程控制语句从零开始重学Java第4天数组、向量和字符串从零开始重学Java第5天对象和类从零开始重学Java第6天异常从零开始......