Java基础之复习(下)

news2024/11/24 3:03:24

目录

前言

一.泛型的认知

 💖泛型类

💖泛型数组

💖泛型的上界

💖泛型的方法

二.内部类讲解

三.了解异常

四.面向对象编程

 💖包

💖继承

💖多态

💖抽象类和接口


🎁博主介绍:博客名为tq02,已学C语言、JavaSE,目前学MySQL和JavaWed

🎥学习专栏:  C语言         JavaSE       MySQL基础

🎄博主链接:tq02的博客_CSDN博客-C语言,Java,MySQL领域博主

​​​​​​​⭐上章复习链接:http://t.csdn.cn/pYpJU

​​​​​​​     欢迎各位→ 点赞👍 +  收藏⭐ +  评论📝+ 关注✨​​​​​​​

前言

        在上章里我们讲解了Java是什么、Java的语言基础、Java的逻辑控制、Java方法、Java数组和类与对象等,而本章主要讲解的是泛型的认知、各种内部类讲解、面向对象编程。 

一.泛型的认知

        什么是泛型?泛型:当你无法明确使用什么数据类型时,我们可以使用一个字母 T代替数据类型。泛型同样可以涉及到类,例如泛型类,而大多数时候会使用在数据结构当中。

 💖泛型类

泛型类的语法格式:

 第一种:class 泛型类名称<类型形参列表> {
                       // 这里可以使用类型参数
                }
第二种:  class 泛型类名称<类型形参列表> extends 继承类/* 这里可以使用类型参数 */ {
                        // 这里可以使用类型参数
                }

注:泛型只能接受类,所有的基本数据类型必须使用包装类

代码示例: 


public class Text1<T> {

        public  T  age;
    public static void main(String[] args) {
        Text1<Integer>  fw=new Text1<>()
            fw.age=20;
    }
}

💖泛型数组

        数组也可以使用泛型,但是在编译过程当中,会把T转换为Object,因此我们无法确认是什么数据类型,因此需要通过强制转换,所以我们正确的格式:T [ ] array=(T[ ]) new Object[大小];

💖泛型的上界

        泛型可代表任何数据类型,同样也可以为类。

例:  public class MyArray<E extends Number> {
        ...                                //相当于 < T >
        }

解析:Number是一个类或者接口,因此E为Number的子类,因此这个泛型有了限制,范围为Number的子类

注:无下界哦

💖泛型的方法

        泛型的方法只适用于静态方法,而其它方法不需要。

静态方法使用泛型: public  static <E> void  函数名(形数){  }


二.内部类讲解

                内部类分为4种,实例内部类、静态内部类、局部内部类、匿名内部类。

实例内部类


public class  外部类名 {

        //实例内部类
    class InnerClass{
            //代码
           // public static int date=60;错误,无法定义静态成员变量
            public static finally int date=60  //finally修饰,为常量
    }
      
 public static void main(String[] args) {
        //实例化内部类
        外部类名 kk = new 外部类名();
        外部类名.InnerClass fw = new 外部类名().new InnerClass();
        fw.textInner();    //输出结果为:textInne
    }

}
  1.  实例内部类:在类的内部里创建一个新的类。
  2. 不可以使用static定义静态成员变量
  3. 外部类和内部类的变量名不可以相同,若相同,会先访问外部类的
  4. 外部类的任何成员都可以在实例内部类方法中直接访问。
  5. 实例化内部类:先实例化外部类,接着语法:外部类.内部类  对象名=new  外部类().new 内部类()
  6. 在内部类中调用外部类的成员,调用方法:外部类名.this.同名成员。

静态内部类

        就是在实例内部类class前使用了static修饰,相当于外部类的一个静态成员,可以访问外部类的静态成员和方法,非静态无法访问。静态内部类可以直接实例化 不需要依附于外部类,语法格式:内部类名  变量名=new  内部类(); 在该内部类中可以声明静态成员也可以声明非静态成员

局部内部类

        在方法体中定义的内部类,不能被访问修饰符public、private和静态修饰符等修饰,作用域也仅限方法中,可以直接访问方法中的属性。

匿名内部类


interface Shape{
    void draw();
}
public class Text3 {
    public static void main(String[] args) {
            int area=20;
        new Shape(){
        //需要重写内部方法
           public void draw()
           {
               // area=50; 无法修改,一旦修改无法访问了。
               System.out.println("正方形面积:"+area);
           }
        }.draw();  //调用draw();
    }

 不能定义任何静态成员、方法和类,使用的是接口,匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,并且不可修改匿名内部类外的变量


 三.了解异常

        异常分为2种,RuntimeException(运行时异常)和受检类异常。而一般而言,运行时异常就是代码问题,可以避免,但是受检类异常则是指I/O异常、网络地址不能打开、文件未找到等。因此无法避免,我们需要使用try-catch-finally语句。

 语法格式: try{            

                //可能发生异常的语句

                          }

                  catch(异常类名  形参名 ){

                //对异常处理的语句

                        }

                finally{

                //无论是否存在异常,都要运行,且可以省略

                        }

当然除了以上的那种方法,还有一种不负责的方法,抛出,当有异常发生时,就丢了,当着没看见进行执行。关键字throw、throws

throw

根据实际情况,在可能发生异常的语句前加 throw。

throws

在方法的头部声明,抛出异常,从而使该方法内不需要在意这个异常(睁眼瞎).

语法格式:public void fun() throws 异常类{  .......   }

throw和throws的区别,简单而言就是,前者是个人假装没有发现问题,不想惹事上身。后者是上头领导通知,不要在意这个问题


四.面向对象编程

        java基础知识点中最重要的便是面向对象编程。面向对象编程包含学会包、继承、多态、抽象、接口的知识点。

 💖包

   包可以存放多种类。包有2种,一种是自己定义的,另一种是Java已经提高的。例如java.util包,若想使用包中的类,需要导包,有2种形式:

  1.  准确无误的引入对应包的类,例如 java.util.Date。引入了java.util包的Date类。
  2. 引入对应包的所有类,例如java.util.*。这个*号代表了java.util类下的所有类

将类放入包中

先创建一个包,然后在包内创建新的类名。

如果一个类没有 package 语句, 则该类被放到一个默认包中

包名规则

包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式(例如 com.tq02.demo1 ).

包名要和代码路径相匹配. 例如创建 com.tq02.demo1 的包, 那么会存在一个对应的路径 com/tq02/demo1 来存储代码



💖继承

        类与类之间可以存在父子关系的哦,一个叫父类、一个叫子类。子类可以拥有父类所有的public字段和方法。也就是可以继承父亲愿意给儿子的,而不愿意给的则用private封装起来。并且子类也可以通过super得到父类的实例。继承关键字:extends

 而在继承当中,我们需要熟练掌握访问修饰符,不同的访问修饰符不同的意义。


class Animal {
    public String name;
    public Animal(String name) {
    this.name = name;
}
    public void eat(String food) {
    System.out.println(this.name + "正在吃" + food);
    }
}
 
class Cat extends Animal {
    public Cat(String name) {
    // 使用 super 调用父类的构造方法.
    super(name);
    }
}
 
class Bird extends Animal {
    public Bird(String name) {
    super(name);
}
    public void fly() {
    System.out.println(this.name + "正在飞 ︿( ̄︶ ̄)︿");
    }
}
public class Test {
    public static void main(String[] args) {
    Cat cat = new Cat("小黑");
    cat.eat("猫粮");
    Bird bird = new Bird("圆圆");
    bird.fly();
}

💖多态

        从一定角度来看,封装和继承几乎都是为多态而准备的。因为多态的存在,需要三个条件

                        1、需要继承   2、需要重写   3、父类引用指向子类对象

多态主要的技术有:向上转型、向下转型、动态绑定、方法重写


动态绑定

        即方法与方法的主体在运行时才进行绑定。例如,当父类和子类拥有一个同名的方法(remove),那么定义了an.remove(),remove方法的调用主体是an,但是an只有调用时,才能知道是实例化了哪个类。而这便是动态绑定。例如之后讲解的向上转型,调用的方法应该是子类的还是父类的。


 向上转型

父类对象通过子类对象去实例化,实际上就是对象的向上转型。向上转型是不需要进行强制类型转换的,但是向上转型会丢失精度。并且实例化的对象只能访问父类中存在的方法和属性,若是子类重写了,则调用子类的方法

语法格式:父类  对象名=new 子类();


向下转型

        并不是所有的对象都可以向下转型,只有当这个对象原本就是子类对象通过向上转型得到的时候才能够成功转型,在向下转型前,通过instanceof 判断某对象是否是某类的实例。换句话说,就是先向上转型,然后再强制类型转换回来


方法重写

        子类中方法名和父类相同,修饰符 返回值类型 方法名(参数列表) 要完全一致,也就是方法体不一样,而实例化对象之后不再是使用父类的方法了,而是使用子类的方法。父类被static、private final修饰的方法不能被重写。


💖抽象类和接口

抽象

        存在的意义就是为了被继承,当所有的子类都要重写父类的某个方法时,父类的方法可以为抽象方法,直接声明,不需要结构体。

定义方法:

               public abstract  类名{

                String name;

                public abstract void 方法名();

}

接口

        接口是为了弥补代码无法多继承,只能单继承的问题,又名为完全抽象类,也就是说接口内的函数都不存在结构体,并且所有的方法都是public和抽象的,而且在代码当中可以省略不写,接口无法被实例化哦,且一个类可以拥有多个接口。

定义方法: public interface  接口名{ }

使用接口: class  类名   implements  接口名{ 方法体 };

二者之间的区别:

  1. 抽象类可以包含非抽象方法,而接口只能包含抽象方法。

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

  3. 抽象类可以有构造方法,而接口不能有构造方法。

  4. 抽象类可以有成员变量,而接口只能有常量。

  5. 抽象类的方法可以有public、protected和default访问修饰符,而接口的方法只能有public访问修饰符。

  6. 抽象类的子类必须实现所有抽象方法,而实现接口的类必须实现所有接口中的方法。

  7. 抽象类可以有普通方法,而接口不能有普通方法。


        目前为止,javaSE的复习就到此结束了,如果对你有用,期待你的留言哦!!!

                                                                                                          ------------懒惰的tq02

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

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

相关文章

OWASP TOP10 大主流漏洞原理和防范措施,易理解版

章节目录 回顾2017年和2021年OWASP主流漏洞都有哪些 一、访问控制崩溃 表现形式 防范 二、敏感数据暴露 防范 三、注入 sql注入分类 SQL盲注 SQL注入产生点 SQL注入的思路 盲注测试的思路 防范SQL 四、不安全的设计 产生的原因 业务漏洞的显现体现 五、安全配…

【C语言14】C语言实现顺序表(这可能是CSDN有史以来讲解最详细的顺序表)

顺序表 什么是顺序表顺序表的接口创建及使用1.创建2.初始化3.扩容4.尾插5.打印6.头插7.尾删8.头删9.查找10.删除任意位置11.插入任意位置12.修改 什么是顺序表 官方定义&#xff1a;顺序表是在计算机内存中以数组的形式保存的线性表&#xff0c;线性表的顺序存储是指用一组地址…

【运维小知识】(一)——centos系统安装(小白入门级)

目录 1.制作系统U盘 2.安装centos系统 3.系统配置 3.1【语言】配置​编辑 3.2【软件选择】配置 3.3【安装位置】配置 3.4【主机名、root密码、网络】配置 1.制作系统U盘 首先下载软件ventoy&#xff0c;制作系统U盘&#xff0c;买个新U盘。先在笔记本电脑安装ventoy软件&a…

【产品设计】如何从0到1做一款微信服务号

微信小程序、服务号作为企业用于在微信内提供服务的工具&#xff0c;已经越来越被广泛使用&#xff0c;对于选择使用哪一种方式来进行开发&#xff0c;在这里表述了我的看法。 前段时间&#xff0c;我们公司准备做一款关于兼职老师招聘的小程序&#xff0c;后来由于种种原因&am…

Flutter 小技巧之滑动控件即将“抛弃” shrinkWrap 属性

相信对于 Flutter 开发的大家来说&#xff0c; ListView 的 shrinkWrap 配置都不会陌生&#xff0c;如下图所示&#xff0c;每当遇到类似的 unbounded error 的时候&#xff0c;总会有第一反应就是给 ListView 加上 shrinkWrap: true 就可以解决问题&#xff0c;那为什么现在会…

Linux进程控制(一)---进程创建和终止(写时拷贝,exit与_exit等)

目录 进程创建 fork()函数 子进程如何继承父进程的数据 1.创建时拷贝分离 2.写时拷贝★ 进程终止 进程终止时&#xff0c;操作系统做了什么&#xff1f; 进程终止的常见方式 代码运行完毕&#xff0c;结果正确 退出码★ 代码运行完毕&#xff0c;结果不正确 代码异…

Redis 读写分离 使用redisTemplate执行lua脚本时,报错处理

项目框架说明 项目配置 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.4</version></parent>....<dependency><groupId>org.springfra…

Mac苹果装机工作必备软件推荐,十大效率神器让你的 Mac 雄起

Mac笔记本固然好用&#xff0c;但还是会有一些使用中的痛点&#xff0c;下面给大家推荐10款最常用的提高mac使用效率的软件 一、Magnet Pro - 窗口大小布局位置控制 这款软件可以让你的Mac像Windows一样&#xff0c;通过拖动窗口实现窗口最大化、左右半屏、上下半屏、1/4窗口…

Ubuntu18.04下的labelImg使用教程

Ubuntu18.04下的labelImg使用教程 1、安装 # 下载labelImg git clone https://github.com/Ruolingdeng/labelImg.git# 配置环境 sudo apt-get install pyqt5-dev-tools sudo pip3 install -r requirements/requirements-linux-python3.txt make qt5py3# 运行 python3 labelImg.…

mysql 1 -- 数据库介绍、mysql 安装及设置

Linux 安装 mysql 1、数据库&#xff08;mysql&#xff09; 数据文件 - 数据库过了系统 2、c/s mysql 服务器 mysql 客户端 ip port : 3306 3、关系型 于 非关系型数据库&#xff08;nosql&#xff09; nosql可以解决一些关系型数据库所无法实现的场景引用。 一、数据库介绍 …

什么是 Elasticsearch 索引?

作者&#xff1a;David Brimley 索引这个术语在科技界已经被用满了。 如果你问大多数开发人员什么是索引&#xff0c;他们可能会告诉你索引通常指的是关系数据库 (RDBMS) 中与表关联的数据结构&#xff0c;它提高了数据检索操作的速度。 但什么是 Elasticsearch 索引&#xff…

Spark(29):Spark内存管理

目录 0. 相关文章链接 1. 堆内和堆外内存规划 1.1. 堆内内存 1.2. 堆外内存 2. 内存空间分配 2.1. 静态内存管理 2.2. 统一内存管理 3. 存储内存管理 3.1. RDD 的持久化机制 3.2. RDD的缓存过程 3.3. 淘汰与落盘 4. 执行内存管理 4.1. Shuffle Write 4.2. Shuffl…

【Fiddler】Fiddler实现mock测试(模拟接口数据)

软件接口测试过程中&#xff0c;经常会遇后端接口还没有开发完成&#xff0c;领导就让先介入测试&#xff0c;然后缩短项目时间&#xff0c;有的人肯定会懵&#xff0c;接口还没开发好&#xff0c;怎么介入测试&#xff0c;其实这就涉及到了我们要说的mock了。 一、mock原理 m…

自学成才的黑客有很多,掌握方法很重要,给你黑客入门与进阶建议

建议一&#xff1a;黑客七个等级 黑客&#xff0c;对很多人来说充满诱惑力。很多人可以发现这门领域如同任何一门领域&#xff0c;越深入越敬畏&#xff0c;知识如海洋&#xff0c;黑客也存在一些等级&#xff0c;参考知道创宇 CEO ic&#xff08;世界顶级黑客团队 0x557 成员&…

如何解决VScode远程下载插件不了的问题?如何手动安装插件?

当我们在使用VScode进行远程操作时&#xff0c;在安装我们所需要的一些插件时&#xff0c;可能会出现如下图&#xff0c;一直卡在安装中....明明只有小几十MB&#xff0c;却一连好几个小时都一动不动。像这种情况&#xff0c;就需要我们进行手动安装该插件。 插件网站&#xff…

照度与感光度(Lux)

何谓照度&#xff1f;照度&#xff08;LUX&#xff09;数值达到多少为低照度&#xff1f;多少数值能适应摄取影像的周围环境&#xff1f; 照度是反映光照强度的一种单位&#xff0c;其物理意义是照射到单位面积上的光通量&#xff0c;照度的单位是每平方米的流明&#xff08;L…

智能精密配电柜在机房低压配电中的运用与发展趋势

安科瑞 华楠 摘 要&#xff1a;随着科学技术的深入发展&#xff0c;各项领域逐渐突破技术限制&#xff0c;充分发挥智能化优势&#xff0c;体现智能与精密的高端价值。以医院机房配电为研究背景&#xff0c;分析配电柜的发展趋势。目前&#xff0c;机房配电中&#xff0c;利用…

sort部分

sort主要针对文件内容的操作&#xff0c;对文件内容进行匹配或者过滤&#xff0c;排序 grep 过滤 针对文本内容进行过滤&#xff0c;也就是查找 -i&#xff1a;忽略大小写默认的&#xff0c;可以不加 -n&#xff1a;显示匹配的行号 -c&#xff1a;只统计匹配的行数 &#…

22款奔驰E350升级ACC自适应巡航系统,解放您的双脚

有的时候你是否厌倦了不停的刹车、加油&#xff1f;是不是讨厌急刹车&#xff0c;为掌握不好车距而烦恼&#xff1f;如果是这样&#xff0c;那么就升级奔驰原厂ACC自适应式巡航控制系统&#xff0c;带排队自动辅助和行车距离警报功能&#xff0c;感受现代科技带给你的舒适安全和…

web中引入live2d的moc3模型-(调整样式)

文章目录 src文件夹修改底部背景色修改背景图片修改canvas大小和定位 src文件夹 基本所有的样式都在src文件夹下的ts文件中&#xff0c;而我们每次修改样式时&#xff0c;记得重新build&#xff0c;已让页面重新加载修改打包后的js文件 npm run build修改底部背景色 默认是黑…