Java基础知识梳理(万字解析)

news2024/11/26 17:32:42

目录

数据类型

变量和常量

变量的命名规范

局部变量

类变量

实例变量

常量

运算符

java程序流程控制

Scanner类简单用法

方法

数组

面向对象Object-Oriented Programming(OOP)

对象

封装

继承 extends

多态

抽象 abstract

接口 interface

异常

异常分类

异常处理的方法:

案例

声明异常和抛出异常

案例

案例

自定义异常

案例


数据类型

数据类型主要分为基本数据类型和引用数据类型两种。其中,基本数据类型分为数值类型和布尔类型。具体数据类型如下所示。

数据类型

注:String是类,不是关键字。 举例

private static String getType(Object a) {
        return a.getClass().toString();
}
public static void main(String[] args) {
    byte a=0;
    short b=1;
    int c=10;
    long d=20L;
    float e=10;
    double f=20.0;
    char g='a';
    boolean h=true;
    System.out.println(a+"===>"+getType(a)+"==="+Byte.SIZE);
    System.out.println(b+"===>"+getType(b)+"==="+Short.SIZE);
    System.out.println(c+"===>"+getType(c)+"==="+Integer.SIZE);
    System.out.println(d+"===>"+getType(d)+"==="+Long.SIZE);
    System.out.println(e+"===>"+getType(e)+"==="+Float.SIZE);
    System.out.println(f+"===>"+getType(f)+"==="+Double.SIZE);
    System.out.println(g+"===>"+getType(g)+"==="+Character.SIZE);
    System.out.println(h+"===>"+getType(h));
}

变量和常量

变量的命名规范

  • 首字母小写,后面单词首字母大写 见名知意
  • 见名知意

局部变量

局部变量: 定义在方法中或者方法声明上的变量。 - 没有默认值 - 内存:存储在栈中的方法中 - 生命周期:随着方法的存在而存在,随方法消失而消失 - 作用域:方法外无法使用,只能在方法内使用

举例

pubilic void get(int a){
    //a,b都是局部变量
    int b=0;
}

类变量

类变量: 定义在类中方法外的变量。 - 有默认值 string 默认为null int默认为0 Boolean默认为false double默认为0.0 char默认为空格 - 内存位置:堆中的对象中 - 生命周期:随对象的存在而存在,随对象的消失而消失 - 作用域:在类中的方法都可以使用

举例

public class Person{
    //类变量/属性
    //可以使用private,设置为私有属性,无法在类外调用
    private int age;
    //public类型属性,可以在其他类中创建对象,并调用
    public String name;
    public double height;
    //类方法
    public void eat(){ }
}

实例变量

实例变量: 从属于对象。 - 默认值为0或者false 举例

public class Student{
    Person person=new Person();
    //无法调用
    System.out.println(person.age);
    //可以正常调用
    System.out.println(person.name);
}

常量

  • 使用final定义
  • 命名规范:大写字母加下划线

运算符

运算符类型运算符
算术+,-,*,/,%,++,--
赋值=
关系<,>,>=,<=,!=
逻辑&&,||,!
&,|,^,~,>>,<<
条件? : ---- x?y:z ---- x为true,返回y,反之,返回z
扩展+=,-=

java程序流程控制

在这里插入图片描述

Scanner类简单用法

用户交互,需要使用Scanner类 - next() 读取到有效字符后结束 有效字符之前遇到空白会自动去除 必须先输入有效字符后才能用空白符作为分隔符或结束符 不能得到带有空格的字符串 - hasNext() 用来查看next()的输入 - nextLine() 以Enter为结束,回车之前的所有字符都可以被获取 可以获取空白符 - hasNextLine() 用来查看nextLine()的输入 - 直接输入特定类型的方法 nexInt() nexFloat() nexDouble() - Scanner输入类,属于IO流,使用完后需要关闭,以免占用资源 scanner.close();

方法

  • 原子性:一个方法只完成一个功能,方便后期扩展。
  • Java是值传递,参数传递时传递的是值,不是地址。
  • 方法重载 同一个类中可以有相同名称的方法 参数列表必须不同 方法返回类型可以相同也可以不同
  • 可变参数 一个方法只能有一个可变参数 可变参数必须为最后一个参数 方法名(修饰符... 参数名称)
  • 递归: 尽量避免递归,防止栈溢出
  • static定义的方法,在类加载的时候就已经加载了

数组

//静态初始化
int[] a={1,2,3}
//动态初始化
int[] a=new int[10];
a[0]=1;
  • 数组中的内容可以是任何数据类型,包括基本类型和引用类型
  • 数组也是对象,数组元素等于对象的成员变量
  • 稀疏数组:用于保存只有少数有用值的数组

在这里插入图片描述

  • 数组排序(具体细节等有时间单写一篇文章) 二分排序 快速排序 冒泡排序 堆排序 。。。等等

面向对象Object-Oriented Programming(OOP)

本质: 以类的方式组织代码,以对象的组织(封装)数据

类: 一种抽象的数据类型,是某一类事物的整体描述。 所有类默认继承object类

class 类名{
    类的属性
    类的方法
}
  • 属性:事物的外在特征,人:姓名,年龄,性别等
  • 方法:事物所具备的功能,人:吃,喝,睡等
  • 构造方法
    • 形式:
      • 和类名相同
      • 没有返回值
    • 作用:
      • 创建对象
      • 用来给对象的属性进行初始化
      • 定义有参构造方法后,如果想要定义无参的对象,必须显示的定义一个无参的构造方法。
public class person{
    public int age;
    //构造方法--默认存在一个空的构造方法
    // Person p=new Person();
    // new本质上是在调用构造方法
    public person(){}

    //这也是构造方法但是需要给age赋值
    //新建对象时
    //Person p=new Person(18);
    public person(int age){
        this.age=age;
    }
}
  • 类中的方法类型
    • 静态方法
      • 类加载时就加载
      • 只加载一次
    • 匿名方法
      • 创建对象时加载
    • 非静态方法
      • 创建对象时加载
  • 类是单继承的,但是接口可以多继承
  • 一个java类中只能有一个public class类,但是可以有多个class 类
  • 内部类:定义在类内部的类
public class person{
    public int age;
    public String name;
    public void eat(){}
    //内部类
    class Student{
        public int ID;
        public void learn(){}
    }
}

对象

对象: 是抽象概念的具体实例 - 对象能执行那些方法主要看左边的类型,和右边的new 关系不大

//创建一个Person对象
//这时会分配空间,进行默认初始化
//创建一个对象本质上是在调用构造方法
Person person=new Person();

匿名对象

  • 创建:new 类名()
  • 只能使用一次
  • 匿名对象可以作为实际参数进行传递

封装

  • 将属性私有
  • get/set :使用快捷键alt+insert,设置所有数据的get/set方法
  • 作用:
    • 提高程序安全性,保护数据
    • 隐藏代码的实现细节
    • 统一接口
    • 增加系统可维护性

继承 extends

  • 本质是对某一批类的抽象
  • super
    • 使用父类的非私有的属性或方法
    • 调用父类的构造器必须在第一句
    • 只能出现在子类的方法或者构造方法中
    • super和this不能同时调用构造方法

在这里插入图片描述

  • 重写 @override
    • 子类重写父类的方法
    • 只能重写公有的方法
    • 方法名要相同
    • 参数列表要相同
    • 修饰符可以扩大但不能缩小
      • public>protected>default>private
    • 抛出的异常:范围可以缩小但不能扩大
    • 重写的原因,父类的功能子类不一定需要或者满足

多态

  • 可以实现动态编译
  • 子类转换为父类,可能丢失一些自己的方法
  • 多态是方法的多态,属性没有多态
    • ClassCastException类型转换异常
    • static方法属于类,不能重写
    • private方法也不能重写
  • 多态存在的条件
    • 有继承关系
    • 子类重写父类的方法
    • 父类引用子类对象
  • instanceof
    • X instanceof Y
    • X和Y存在父子关系====true,反之=====False
public class Person {
}
public class Student extends Person {
}
public class Teacher extends Person {
}
public class Application {
    public static void main(String[] args) {
        //Object>Person>Student
        //Object>Person>Teacher
        //Object>String
        Object object=new Student();
        System.out.println(object instanceof Student);//true
        System.out.println(object instanceof Person);//true
        System.out.println(object instanceof Object);//true
        System.out.println(object instanceof Teacher);//false
        System.out.println(object instanceof String);//false
        System.out.println("=================================");
        Person person=new Student();
        System.out.println(person instanceof Student);//true
        System.out.println(person instanceof Person);//true
        System.out.println(person instanceof Object);//true
        System.out.println(person instanceof Teacher);//false
//        System.out.println(person instanceof String);//编译报错
        System.out.println("=================================");
        Student student = new Student();
        System.out.println(student instanceof Student);//true
        System.out.println(student instanceof Person);//true
        System.out.println(student instanceof Object);//true
//        System.out.println(student instanceof Teacher);//编译报错
//        System.out.println(student instanceof String);//编译报错
    }
}

抽象 abstract

抽象类: abstract class 类名

public abstract class Person{}
  • 不能创建抽象类的对象,只能靠子类来实现
  • 抽象类中可以有抽象方法和普通方法

抽象方法: abstract 类型 方法名

public abstract void run();
  • 只有方法名,没有方法的实现
  • 抽象方法只能在抽象类中

接口 interface

  • 只有规范,无法自己写方法
  • 接口都需要实现类,implements
    • 实现类必须重写接口中的方法
  • 接口中定义的方法都是抽象的
  • 接口中的属性默认都是常量

异常

异常: 程序运行中出现的不正常现象,如果不能对这些现象进行正确处理可能导致程序不能运行,造成不必要的损失。

异常分类

Throwable: 可抛出的一切错误或者异常的父类 - Error:JVM,硬件,执行逻辑错误,不能手动处理 - Exception:程序再运行和配置中产生的问题,可处理 - 运行时异常:RuntimeException以及其子类 - 检查时异常:Exception以及其子类,RuntimeException除外

常见的异常如下图所示:

在这里插入图片描述

异常处理的方法:

  • 可以使用多重catch捕获异常
    • 捕获异常时,子类异常在前,父类异常在后
    • 发生异常时按顺序逐个匹配,且只执行第一个与异常匹配的catch语句
  • try...finally...不捕获异常,将异常向上一级抛出
  • finally不执行的唯一情况是退出java虚拟机
  • finally可写可不写

在这里插入图片描述

案例

public class testException {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int re= 0;
        try {
            System.out.println("输入第一个数:");
            int n1=scanner.nextInt();
            System.out.println("输入第二个数:");
            int n2=scanner.nextInt();
            re = n1/n2;
        } catch (ArithmeticException e){
//            e.printStackTrace();
            System.out.println("算术异常发生了");
        } catch (InputMismatchException e){
//            e.printStackTrace();
            System.out.println("输入类型不匹配异常发生了");
        }catch (Exception e) {
//            e.printStackTrace();
            System.out.println("异常出现了");
        } finally {
            System.out.println("资源释放");
        }
        System.out.println("结果为:"+re);
        System.out.println("程序结束了");
    }
}

运行结果:

正常执行时

出现异常时

声明异常和抛出异常

声明异常:

- 在方法名后添加throws关键字,并添加想要声明的异常类型

- 可以声明多个异常,用逗号隔开

案例

public class testExceptionThrows {
    public static void main(String[] args) {
        try {
            divide();
        } catch (Exception e) {
            System.out.println("异常发生");
        }
    }

    private static void divide() throws Exception,RuntimeException {//可声明多个异常,用逗号隔开
        Scanner scanner=new Scanner(System.in);
        int re= 0;
        System.out.println("输入第一个数:");
        int n1=scanner.nextInt();
        System.out.println("输入第二个数:");
        int n2=scanner.nextInt();
        re = n1/n2;
    }
}

运行结果

在这里插入图片描述

抛出异常: 根据代码的执行情况去抛出一个异常,可以结合自定义异常,准确抛出代码执行过程中可能出现的异常。

  • 使用thorw关键字,在程序运行出现预期之外的数据时抛出异常
  • 如果抛出的异常类型时Exception,需要在先声明异常或者使用try-catch处理异常

案例

public class testExceptionThrow {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入学生成绩:");
        int sorce=scanner.nextInt();
        //如果输入的学生成绩不符合正常情况就需要抛出异常
        if (sorce<0||sorce>100){
            //AgeException自定义异常
            throw new AgeException("输入成绩不符合规则");
        }else{
            System.out.println("该学生的成绩为:"+sorce);
        }
    }
}

自定义异常

自定义异常的构造:

  • 继承Exception或者其子类
  • 添加构造方法

目的: 让抛出的异常名称更加准确,可以做的见文知意,从而提高项目维护和debug的效率

案例

Student类

public class Student {
    private String name;
    private int age;
    public Student(){}

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //手动重写toString方法
    /*public String toString(){
        return name+":"+age;
    }*/

    //alt+insert自动重写toString方法
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

自定义异常:

public class AgeException extends RuntimeException {
    public AgeException() {
    }

    public AgeException(String message) {
        super(message);
    }

    public AgeException(String message, Throwable cause) {
        super(message, cause);
    }

    public AgeException(Throwable cause) {
        super(cause);
    }

    public AgeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

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

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

相关文章

CSS3弹性布局

2009年&#xff0c;W3C提出一种崭新的布局方案—弹性盒(Flexbox)布局&#xff0c;使用该模型可以轻松地创建自适应窗口的流动布局&#xff0c;或者自适应字体大小的弹性布局。W3C的弹性盒布局分为旧版本、新版本及混合过渡版本3种不同的设计方案&#xff0c;其中混合过渡版本主…

「专题速递」数据驱动赋能、赛事直播优化、RTC技术、低延时传输引擎、多媒体处理框架、GPU加速...

点击文末阅读原文&#xff0c; 免费报名【抖音背后的体验增长实战揭秘】专场 随着全行业视频化的演进&#xff0c;营销、知识、商业和空间的交互体验正在被重塑。这种变化不仅仅是一种抽象的趋势&#xff0c;更是关系到用户留存和业务增长的关键因素。面对这样的挑战&#xff0…

技术报告模板:2023年全国大学生电子设计竞赛:运动目标控制与自动追踪系统(E题)

2023年全国大学生电子设计竞赛 运动目标控制与自动追踪系统&#xff08;E题&#xff09; 2023年8月4日 摘要&#xff1a;针对本题目的各项要求&#xff0c;本研究采用软硬件结合的方法设计了一套运动目标控制与自动追踪系统。该系统由OpenMV嵌入式计算机视觉平台、STM32单片机控…

[PHP]pearProject协作系统 v2.8.14 前后端

pearProject是一款轻量级的在线项目/任务协作系统&#xff0c;远程办公协作。 概述 PearProject 不支持 IE8 及以下版本&#xff0c;建议使用基于Webkit内核的现代浏览器访问 PearProject 为前后端分离架构&#xff0c;因此安装分为后端和前端两大部分&#xff0c;需要分别进…

定时器PWM输出

目录 介绍 PWM占空比 框图 输出比较 通道 1 输出比较功能为例 PWM 输出模式 PWM 边沿对齐模式 hal库代码 标准库代码 介绍 脉冲宽度调制(PWM)&#xff0c;是英文“Pulse Width Modulation”的缩写&#xff0c;简称脉宽调制&#xff0c;是利用微 处理器的数字输出来对模…

Android启动优化-全文详细

一个应用App的启动速度能够影响用户的首次体验&#xff0c;通常用户期望app响应和加载速度越快越好。一个启动速度慢的app很可能会给用户留下不好的印象&#xff0c;除了导致用户在应用市场上的打分低之外&#xff0c;很有可能导致致用户直接卸载。这种糟糕的体验可能会导致用户…

[译]CSS Animations 与 CSS Transitions

本文译者为 360 奇舞团前端开发工程师原文标题&#xff1a;CSS Animations Versus CSS Transitions原文作者&#xff1a;Kirupa Chinnathambi原文出处&#xff1a;《Creating Web Animations: Bringing Your UIs to Life》 在 CSS 中有两种设置动画的方式即 CSS animations 和 …

Modelsim 使用教程(3)——Projects

目录 一、概述 二、设计文件及tb 2.1 设计文件 counter.v 2.2 仿真文件 tcounter.v 三、操作流程 3.1 Create a New Project&#xff08;创建一个新的工程&#xff09; 3.2 Add Objects to the Project&#xff08;把代码加入项目&#xff09; 3.3 Compile the …

vue+vant图片压缩后上传

vuevant图片压缩后上传 vue文件写入 <template><div class"home"><van-field input-align"left"><template #input><van-uploaderv-model"fileList.file":after-read"afterRead":max-count"5":…

电子沙盘数字沙盘地理信息开发教程第17课

M3DGIS电子沙盘数字沙盘地理信息开发教程第17课新增加属性在MTGIS3d控件 public bool ShowFLGrid;//是否显 示方里网格。 public bool Atmosphere;//是否显示大气圈。&#xff08;因为WPF不支持shader功能&#xff0c;所以效果嘛。。。&#xff09; 在SDK中提供底层的模型访问接…

美观且可以很方便自定义的MATLAB绘图颜色

函数介绍 主函数是draw_test&#xff0c;用于测试函数。 draw_h是函数&#xff0c;用于给Matlab提供美观且可以很方便自定义的绘图颜色。 draw_h函数介绍 这是一个带输入输出的函数&#xff0c;输入1/2/3&#xff0c;输出下面三种颜色库的配色&#xff0c;每种库均有五种颜色…

开发板挂载 Ubuntu 的 NFS 目录

前言 使用的开发板为韦东山老师的 IMX6ULL 目录 什么是 NFS 协议&#xff1f; 为什么要挂载 Ubuntu 的 nfs 目录&#xff1f; 开发板挂载 Ubuntu 的 NFS 目录 步骤 1. 确定 ubuntu 的桥接网卡 IP 2. 判断是否开权限了 3. 判断是否安装并启动 NFS 服务 4. 在开发板上执…

C语言从入门到精通之【第一个程序hello world】

编程步骤 通常&#xff0c;我们按照以下步骤进行 确立目标设计程序编写代码编译程序运行程序测试&调试修改维护 输出hello world 每个学编程的人都会从最经典的【输出hello world】开始。 https://lightly.teamcode.com/ 我们可以使用这个在线IDE学习C语言。 代码很简…

1. PPT高效初始化设置

1. PPT高效初始化设置 软件安装&#xff1a;Office 2019 主题和颜色 颜色可以在白天与黑夜切换&#xff0c;护眼 切换成了黑色 撤回次数 撤回次数太少&#xff0c;只有20次怎么办 自动保存 有时忘记保存就突然关闭&#xff0c;很需要一个自动保存功能 图片压缩 图…

Android Studio打包AAR

注意 依赖的Android Studio版本为4.2.2 更高的Android Studio版本使用方法可能有所不同&#xff0c;gradle的版本和gradle plugins的版本都会影响使用方式。 基于此&#xff0c;本文只能作为参考&#xff0c;而不能作为唯一答案&#xff0c;如果要完全依赖本文&#xff0c;则…

Python接口自动化测试 —— Requests库学习

安装&#xff1a; pip install requests 例子&#xff1a; import requests r requests.get(http://www.baidu.com) print r.status_code print type(r) print r.cookies运行程序&#xff0c;得到结果&#xff1a; 运行程序&#xff0c;得到结果&#xff1a; 200 <cla…

sort的第三个参数与priority_queue的第三个模板参数

sort 在C的标准库中&#xff0c;std::sort是一个用于对容器的元素进行排序的算法。它接受三个参数&#xff1a; 1、需要排序的容器的起始迭代器&#xff08;包含&#xff09;。 2、需要排序的容器的结束迭代器&#xff08;不包含&#xff09;。 3、可选参数&#xff0c;用于指…

webgl入门-基础三角形绘制

背景 最近工作上频繁接触webgl&#xff0c;因为不熟悉每每看到shader中的语法总感觉脑袋大&#xff0c;所以打算开始从零学习一下webgl&#xff0c;文章只做记录学习历程&#xff0c;那就直接开始吧&#xff01; 开始 可以配合着这个文章食用。 我还是对webgl有一些概念的&…

【云备份|| 日志 day2】FileUtil JsonUtil

这几天感冒了&#xff0c;稍微落下了进度 util工具 fileUtil&#xff08;文件操作类&#xff09; 在客户端&#xff0c;又或者是在服务端&#xff0c;本质是都是对文件的读写和管理&#xff0c;所以有必要封装一个文件操作类。 class FileUtil{ private:std::string _name; …

Unity Editor工具,导出unitypackage可选择是否包含脚本

概述 Unity自带的Export Package...功能&#xff0c;如果选中资源中包含脚本&#xff0c;或者Prefab挂载了自定义的脚本。在之后弹出的选择框内&#xff0c;如果勾选了Include dependencies会将整个项目所有的脚本全部都包含在内。等于导入了很多不相关的代码。如果取消勾选In…