java复习回顾

news2024/12/24 0:56:08

文章目录

  • 0 开发工具
  • 1. 对象和类、三大特性
  • 2. 成员/实例变量和实例变量(this关键字)
  • 3. 方法重载overload
  • 4. 构造方法和this关键字
  • 5. 继承
  • 6. 访问修饰符
  • 7. 方法重写
  • 8. 继承下的构造执行
  • 9. 多态
    • 9.1 向上转型
    • 9.2 向下转型
    • 9.3 多态的应用

0 开发工具

Maven是进行包管理的工具,只需要声明一些配置,程序就可以自动下载所依赖的包。其配置文件在本机电脑~\.m2\settings.xml中,settings.xml里面声明了依赖包存放的位置,也可以在里面声明下载依赖包的国内镜像地址。

idea中自带了jdk,无需额外安装。
Git可用来进行版本控制

1. 对象和类、三大特性

面向对象的思想object oriented programming:一切皆对象,对象由属性和方法构成。
类相当于一个模板,对象是由类创建出来的,每个对象都是类的一个实例,创建对象的过程也称为实例化。

封装:把一些对象的共同属性、方法抽象出来,合理的封装,抽象成类。
继承:子类享有父类的属性和方法,并且还存在一定的属性和方法的扩展
多态:有两种意义的多态。一种是操作名称的多态,即有多个操作具有相同的名字,但这些操作所接收的参数类型必须不同。 另一种多态是和继承有关的多态,是指同一个操作被不同类型对象调用时可能产生不同的行为。

2. 成员/实例变量和实例变量(this关键字)

成员变量也叫实例变量。
在这里插入图片描述

// 该例子展示了实例/成员变量、局部变量的作用范围
// 以及this关键字的使用:this指向当前对象
public class Dog {
    String name;
    public Dog(){ // 构造方法
        name="汪汪";
    }
    public void eat(){
        String name="局部变量汪汪";
        System.out.println(name+"在吃东西");//name=局部变量汪汪
        System.out.println(this.name+"在吃东西");//name=汪汪
    }
    public void sleep(){
        System.out.println(name+"在睡觉");//name=汪汪
    }

    public String getName() {
        return name; //name=汪汪
    }
}

3. 方法重载overload

方法重载overload:一个类中定义多个具有相同名字的方法,具体执行哪个,由传入的参数决定。即方法名字相同,参数列表不同(类型、个数、顺序),与返回值类型、访问修饰符无关。
System.out.println();是一个经典的重载方法。

//方法重载举例
public class ClassTest {
    public void test(int a){}
    public void test(String a){}
    public void test(int a,String b){}
    public void test(String a,int b){}
}

4. 构造方法和this关键字

构造方法:类中的特殊方法,主要用于创建对象。

  • 名称与类名相同
  • 没有返回类型
  • 创建对象时,出发构造方法
  • 编译器默认执行一个无参的构造方法
  • 构造方法也可以重载,遵循重载规则
public class ThisTest {
    public static void main(String[] args) {
        ThisDog dog=new ThisDog("汪汪",5,"公");
        System.out.println(dog.name+"---"+dog.age+"---"+dog.sex);
    }
}
public class ThisDog {
    String name;
    int age;
    String sex;
    public ThisDog(String name,int age){
        this.name=name;
        this.age=age;
    }
    public ThisDog(String name,int age,String sex){
        this(name,age); //this调用重载的构造方法只能放在第一行
        this.sex=sex;
    }
}

5. 继承

语法:class子类 extends 父类{ } //定义子类时,显式继承父类。所有的类默认都继承Object
应用:子类可以使用父类中的属性和方法,也可定义自己独有的属性和方法。
优势:提高了代码的复用性和可扩展性。
特点:单继承(一个子类只能有一个直接父类);多重继承(类之间可以多级继承,如C类可以继承A类、B类中所有的属性和方法)
在这里插入图片描述
注意:父类的私有属性可以被继承但不能被直接访问(可借助其他工具观察内存分布,可知父类的私有属性可以被继承。父类的私有属性可通过get、set方法访问)。
当父类和子类具有相同的属性时,使用super和this关键字区分。

在这里插入图片描述

父类的私有属性可通过get、set方法访问

public class A {
    private int a;
    
    public void setA(int a) {
        this.a = a;
    }

    public int getA() {
        return a;
    }

    public void show() {
        System.out.println("父类的show方法");
    }
}
public class B extends A{
    public B(){
        setA(1);
    }
    public void show(){
        System.out.println(getA()+" 子类的show方法");
    }
}

public class Test {
    public static void main(String[] args) {
        B b=new B();
        b.show();
    }
}
//输出: 1 子类的show方法

6. 访问修饰符

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。

  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
  • public : 对所有类可见。使用对象:类、接口、变量、方法
  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。

我们可以通过以下表来说明访问权限:
在这里插入图片描述
默认访问修饰符-不使用任何关键字
如果在类、变量、方法或构造函数的定义中没有指定任何访问修饰符,那么它们就默认具有默认访问修饰符。

默认访问修饰符的访问级别是包级别(package-level),即只能被同一包中的其他类访问。

7. 方法重写

前提A是父类,B extends A
有以下规则和特点:

  1. 子类方法的访问权限可以比父类大
  2. 子类方法的返回值类型可以和父类一致,也可以是父类返回类型的子类
  3. 方法名一定要完全一样
  4. 参数列表也必须和父类完全一样(否则就成方法重载了)
  5. 子类重写父方法后,优先执行子类方法。若想要执行父类中被重写 的方法,使用super关键字
//父类A中的show方法
protected A show() {
    System.out.println("父类的show方法");
    return null;
}
//子类B中的show方法,B extends A,public > protected,B < A
public B show(){
	super.show();
    System.out.println("子类的show方法");
    return null;
}
public class Test {
    public static void main(String[] args) {
        B b=new B();
        b.show();
    }
}
/*输出:
父类的show方法
子类的show方法
*/

8. 继承下的构造执行

要想构造子类,必先调用父类构造方法,但并未构建一个父类对象,构建的是子类对象

// 无参构造方法
package example05;

public class Test {
    public static void main(String[] args) {
        new C();
    }
}
class A{
    public A(){
        System.out.println("A的构造方法");
    }
}
class B extends A{
    public B(){
        System.out.println("B的构造方法");
    }
}
class C extends B{
    public C(){
        System.out.println("C的构造方法");
    }
}
//output:
//A的构造方法
//B的构造方法
//C的构造方法

要想构造子类,必先调用父类构造方法,但并未构建一个父类对象,构建的是子类对象。其空间分布如下:
其判断具体见下面代码中的注释掉的输出,均为true。
一个子类对象可以是一个父类类型,但一个父类对象不能是一个子类类型。如b是B的一个对象,c是C的一个对象,b instanceof C=false,c instanceof B=true

//        System.out.println(this instanceof B);// true,一个子类类型可以是一个父类类型
//        System.out.println(this instanceof C);// true

在这里插入图片描述

// 有参构造方法
package example06;

public class Test {
    public static void main(String[] args) {
        C c=new C(7,8,9);
        System.out.println(c.a+"---"+c.b+"---"+c.c);
    }
}
class A{
    int a=1;
    public A(int a){
        this.a=a;
        System.out.println("A的构造方法");
    }
}
class B extends A{
    int b=2;
    public B(int a,int b){
        super(a);
        this.b=b;
        System.out.println("B的构造方法");
//        System.out.println(this instanceof B);// true
//        System.out.println(this instanceof C);// true
    }
}
class C extends B{
    int c=3;
    public C(int a,int b,int c){
        super(a,b);
        this.c=c;
        System.out.println("C的构造方法");
    }
}
//输出
//A的构造方法
//B的构造方法
//C的构造方法
//7---8---9

9. 多态

以下所举例子,均以A是父类,B extends A,C extends B为前提。

9.1 向上转型

父类引用指向子类对象,从而形成多态。
父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法。
A a=new B(); A a是父类引用(引用类型),new B()产生了一个子类对象(对象类型),a只能调用A中的方法/属性,不能调用B中的方法/属性。也就是a.属性/方法()必须在类A中存在。
若子类B没有重写A的show方法,输出父类A的show方法。若调用a.showB()会报错,因为父类A中并没有showB方法

package example06;

public class Test {
    public static void main(String[] args) {
        A a=new B();
        a.show();
//        a.showB(); //报错
    }
}
class A{
    public void show(){
        System.out.println("父类A的show方法");
    }
}

class B extends A{
    public void show(){
        System.out.println("子类B的show方法");
    }
    public void showB(){
        System.out.println("子类B的showB方法");
    }
}

//输出:子类B的show方法

9.2 向下转型

将父类引用中的真实子类对象,强制转换为子类本身对象,称为向下转型。

A a=new B();
B b=(B) a;//强制类型转换

向下转型前,应判断引用中的对象的真实类型(使用instanceof来判断),保证类型转换的正确性。

9.3 多态的应用

应用一:使用父类作为方法形参实现多态,使方法参数的类型更广泛。
应用二:使用父类作为方法返回值实现多态,使方法可以返回不同子类对象。

package example08;

public class Person {
    public void feed(Pet pet){//多态的应用一,Pet作为方法形参
        pet.eat();
    }
    public Pet getPet(String type){//多态的应用二,返回的是Pet
        if(type.equals("dog")){
            return new Dog();
        }
        else{
            return new Cat();
        }
    }
    public static void main(String[] args) {
        Person person=new Person();
        Pet pet=person.getPet("dog");
        person.feed(pet);//多态的应用二
        person.feed(new Cat());//多态的应用一,可以改成new别的,如Dog
    }

}
class Pet{
    public void eat(){
        System.out.println("在吃东西");
    }
}

class Dog extends Pet{
    public void eat(){
        System.out.println("狗狗在啃骨头");
    }
}
class Cat extends Pet{
    public void eat(){
        System.out.println("猫咪在吃鱼");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1054351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[DS资源推荐] Data Structure 严书配套代码

下图引入自康建伟老师博客 Github地址 使用说明&#xff1a;康老师博客 使用感受&#xff1a;Orz&#xff01;非常非常非常全面&#xff01;终于能看得下去严书了…

【DLoopDetector(C++)】DBow2词袋模型loop close学习

0.前言 最近读了两篇论文&#xff0c;论文作者开源了一种基于词袋模型DBoW2库的DLoopDetector算法&#xff0c;自己运行demo测试一下 对应论文介绍&#xff1a;Bags of Binary Words for Fast Place Recognition in Image Sequences 开源项目Github地址&#xff1a;https://gi…

【Java 进阶篇】JDBC Connection详解:连接到数据库的关键

在Java中&#xff0c;要与数据库进行交互&#xff0c;需要使用Java数据库连接&#xff08;JDBC&#xff09;。JDBC允许您连接到不同类型的数据库&#xff0c;并执行SQL查询、插入、更新和删除操作。在JDBC中&#xff0c;连接数据库是一个重要的步骤&#xff0c;而Connection对象…

公众号商城小程序的作用是什么

公众号是微信平台重要的生态体系之一&#xff0c;它可以与其它体系连接实现多种效果&#xff0c;同时公众号内容创作者非常多&#xff0c;个人或企业商家等&#xff0c;会通过公众号分享信息或获得收益等&#xff0c;而当商家需要在微信做私域经营或想要转化粉丝、售卖产品时就…

springboot和vue:十、vue2和vue3的差异+组件间的传值

首先用vue-cli创建一个vue2的项目。 vue2和vue3的差异 main.js的语法有所差别。 vue2是 import Vue from vue import App from ./App.vuenew Vue({render: h > h(App), }).$mount(#app)vue3是 import { createApp } from vue import App from ./App.vuecreateApp(App).…

【OpenMV】形状识别 特征点检测 算法的组合使用

目录 形状识别 圆形检测 矩形识别 特征点检测 算法的组合使用 形状识别 圆形 霍夫圆检测算法 通过霍夫变换查找圆&#xff0c;支持openmv3以上 矩形 四元检测算法 识别任意大小任意角度的矩形&#xff0c;四元检测算法对图像的失真&#xff0c;畸变没有要求&#xff0c;畸…

spark SQL 任务参数调优1

1.背景 要了解spark参数调优&#xff0c;首先需要清楚一部分背景资料Spark SQL的执行原理&#xff0c;方便理解各种参数对任务的具体影响。 一条SQL语句生成执行引擎可识别的程序&#xff0c;解析&#xff08;Parser&#xff09;、优化&#xff08;Optimizer&#xff09;、执行…

Java性能调优必备知识学习路线

性能调优是Java开发中一个非常重要的环节&#xff0c;它可以帮助我们提高系统的性能、稳定性、可靠性和用户体验&#xff0c;从而提高用户体验和企业竞争力。 目录 一、为什么要学习Java性能调优&#xff1f; 二、如何做好性能调优&#xff1f; 2.1 扎实的计算机基础 2.2 …

Acwing 143. 最大异或对

Acwing 143. 最大异或对 题目描述思路讲解代码展示 题目描述 思路讲解 这道题的启示是&#xff1a;字典树不单单可以高效存储和查找字符串集合,还可以存储二进制数字 思路:将每个数以二进制方式存入字典树,找的时候从最高位去找有无该位的异. 代码展示 #include<iostream…

餐饮外卖配送小程序商城的作用是什么?

餐饮是支撑市场的主要行业之一&#xff0c;其市场规模很大&#xff0c;从业商家从大到小不计其数&#xff0c;对众商家来说&#xff0c;无论门店大小都希望不断生意增长&#xff0c;但在实际发展中却会面对不少痛点&#xff1b; 餐饮很适合线上经营&#xff0c;无论第三方外卖…

思维模型 周期

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。周期是一个看似极为简单&#xff0c;但背后却蕴藏着大智慧的模型&#xff0c;了解周期&#xff0c;对于了解王朝更替&#xff0c;数学之美&#xff0c;经济运转等都有帮助。 1 周期的应用 …

Swing程序设计(4)JLabel标签和导入图片

文章目录 前言一、JLabel标签 1.介绍2.实例展示二、JLabel中绘图和导入图片 1.自定义绘图2.导入图片总结 前言 本文介绍了Swing程序中JLabel标签的使用&#xff0c;以及在标签中导入图片和自定义图标的方法。 一、JLabel标签的使用 1.介绍 JLabel标签&#xff1a;在Swing程序中…

模拟实现map/set[改编红黑树实现map/set容器底层]

文章目录 1.搭建框架1.1map1.2set1.3RBTree1.4图解 2.代码剖析2.1RBTree.h2.2Map.h2.3Set.h2.4Test.cpp 1.搭建框架 1.1map 1.2set 1.3RBTree 1.4图解 2.代码剖析 2.1RBTree.h #pragma once #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <list&…

.net 温故知新:Asp.Net Core WebAPI 入门使用及介绍

在Asp.Net Core 上面由于现在前后端分离已经是趋势,所以asp.net core MVC用的没有那么多,主要以WebApi作为学习目标。 一、创建一个WebApi项目 我使用的是VS2022, .Net 7版本。 在创建界面有几项配置: 配置Https启用Docker使用控制器启用OpenAPI支持不使用顶级语句其中配置…

YOLOv5-PTQ量化部署

目录 前言一、PTQ量化浅析二、YOLOv5模型训练1. 项目的克隆和必要的环境依赖1.1 项目克隆1.2 项目代码结构整体介绍1.3 环境安装 2. 数据集和预训练权重的准备2.1 数据集2.2 预训练权重准备 3. 训练模型3.1 修改数据配置文件3.2 修改模型配置文件3.3 训练模型3.4 mAP测试 三、Y…

[NOIP2012 提高组] 国王游戏(贪心,排序,高精度)

[NOIP2012 提高组] 国王游戏 题目描述 恰逢 H 国国庆&#xff0c;国王邀请 n n n 位大臣来玩一个有奖游戏。首先&#xff0c;他让每个大臣在左、右手上面分别写下一个整数&#xff0c;国王自己也在左、右手上各写一个整数。然后&#xff0c;让这 n n n 位大臣排成一排&…

基于SpringBoot的大学生租房平台

基于SpringBoot的大学生租房平台的设计与实现&#xff0c;前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色&#xff1a;用户、管理员、房东 管理员&#…

ck 计算留存

1.函数介绍 参数聚合函数 | ClickHouse Docs Retention​ 该函数将一组条件作为参数&#xff0c;类型为1到32个 UInt8 类型的参数&#xff0c;用来表示事件是否满足特定条件。 任何条件都可以指定为参数&#xff08;如 WHERE). 除了第一个以外&#xff0c;条件成对适用&…

第七章 查找 十、散列查找

一、哈希表&#xff08;散列表&#xff09; 哈希表的数据元素的关键字与其存储地址直接相关。 二、解决冲突的方法 三、散列表中元素的查找 总共对比了3个关键字&#xff0c;所以查找长度为3. 四、查找效率计算 &#xff08;1&#xff09;成功的概率 需要对比一次的关键字为…

保存锁屏壁纸 win11

经常在锁屏看见自己超级喜欢的壁纸&#xff0c;但是找不到在哪保存。这次把查到的方法总结在这里。 1.WinR调出运行框 2.输入以下内容后回车 C:\Users\你的用户名\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets3.得到的…