JAVA高级部分学习小结(2023.11.4)

简介: JAVA高级部分学习小结(2023.11.4)

一:对于static的认识

1:简单介绍:static实际上是一种修饰词语,大多数用作对于成员方法的一个静态化管理.

优点:将一个私有的变量转化为共享的数据,从而减少了代码的臃肿性,让代码看起来更加的简洁;

使用方法 :在需要进行修饰的变量类型的名称前进行修饰,如果对于成员方法进修修饰,需要在权限修饰符后面添加

2:使用特点

根据使用的对象的不同,大体可以分为两大类:

  1:对于成员变量的使用

对于成员变量进行修饰

1.能够让被修饰的成员变量变成一个在整个类当中所共享的一个东西,赋值一次所有的都会是这种的形式

2.能够变成被类名称.   比方说,在这里,类的名称是一个static01,再进行使用的时候,会提示是否使用这种变量,

而不用再新创建一个对象,使用对象来对其进行调用

3.在类被调用的时候,静态变量(也就是这里所提到的被static所修饰的成员变量)会首先加载出来,随着类的加载而加载,

直接在堆内存当中存在(相当于直接NEW了一次)

    2:对于成员方法的使用

关于成员方法的选择,我们应选择工具类型的,也就是说这个成员方法是可以对与

这个主方法进行协助的,除此之外没有其他的作用(打工人,打工魂)

上链接!

public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        student stu=new student();
        stu.name="wang";
        stu.age=18;
        //在这里,已经知道了两个人是在同一个学校的,所以这个变量是可以确定是唯一的
        //在这个条件下,可知这个变量应该被共享,所以使用static
        student.school="嵩阳高中";
        System.out.println(stu.name+"-----"+student.school+"-----"+stu.age);
 
        student stu1=new student();
        stu1.age=19;
        stu1.name="王雷阳";
        //没有对与学校进行重新输入数值,在之前已经在输入过了一次,所以可以直接全部实现
        //共享
        System.out.println(stu1.name+"----"+student.school+"----"+stu1.age);
 
        //成员方法的static的使用
       //可以直接删除这一个变量类型,减少推内存的使用程度 student stu2=new student();
        int[] num={3,2,3};
        int max = student.getMax(num);
        System.out.println(max);
        int min = student.getMin(num);
        System.out.println(min);
        //以上两种求最大跟最小值也是可以运用同样的道理,直接只用类名称进行使用
        //如果对于这个遍历的方法进行static的修饰,那么也可以直接使用类的名称
        //直接进行调用
        student.getOrder(num);
 
        //当所有的成员方法都被修饰的时候,可以对于这个类型直接进行全部的修饰
        //目的是为了防止创建一个新的对象,从而让内存的使用变小,减少内存的浪费使用
    }
}

背后代码(这里所写的代码都可以算作是一个工具性质的成员方法,仅供参考)

public class student {
    String name;
    int age;
    static String school;
 
 
    public static int getMax(int[] num){
        int max=num[0];
        for (int i = 1; i < num.length; i++) {
            if(max<num[i]){
                max=num[i];
            }
        }
        return max;
    }
 
    public static int getMin(int[] num){
        int min=num[0];
        for (int i = 1; i < num.length; i++) {
            if(min>num[i]){
                min=num[i];
            }
        }
        return min;
    }
 
    public static void getOrder(int[] num){
        System.out.print("[");
        for (int i = 0; i < num.length-1; i++) {
            System.out.print(+num[i]+", ");
        }
        System.out.println(num[num.length-1]+"]");
    }
 
}


二:继承

1.简单介绍:继承用通俗易懂的话来说就是儿子继承父亲的东西,父亲有什么东西,儿子也就会有什么,子承父业,而且可以是全部的继承

tips:需要注意的是,可以是全部的继承,是不包括在父类当中所包含的  "构造方法"  这一个是子类所不能够使用的,所以子类如果要使用构造方法需要自己再重新进行构造.而且在这里,即使是private修饰过的成员变量.子类依然是可以去继承的,只不过是自己的访问权限不够,因此不能够直接调用,但是!在堆内存当中新添加子类方法的时候,会直接在子类下创建一个相同地址的SUPER的.


优点:采用继承的方式能够让原本比较冗长的代码看起来更加的简单,从而让代码看起来更加"美观".减少内存的过分使用

2.使用特点

在继承了之后,父当中的任何成员变量,子类都可以进行使用

使用的情况,一般实在对于多个的类型之间


构造的方法

class zi extends fu{
}

注意:在使用继承的时候需要考虑使用的合理性,保证有一定的共性,

并且满足 is a的一个特点

tips(有关JAVABEAN的疑问):

那么,在这里会有一个很~~~大的疑问,哎!JAVABEAN当中,所有的成员变量不是最好都不让被人看到,也就是最好都进行私人话修饰,添加private吗?私人化之后,子类怎么再去使用?


GOOD 想的很好

在这里,解决方案其实很简单,既然成员变量被私人化,那我先在子类放置一个父类的带参构造方法,先在父类当中完成初始化,进行赋值,之后在父类当中直接创建一个GET方法,调用数据不就OK了

上链接!

manager in=new manager("王森",18);
        in.method();
 
        coder sc=new coder("孙雨生",19);
        sc.method();
    }
}
//创建父类
//需要考虑的一点是,在JAVABEAN当中,所有的成员变量都是要进行私有化的
/*
这个时候,子类不能直接调用,但是可以调用其中父类的获取方法!
 */
class empoler{
    private String name;
    private int age;
 
 
    //父类的带参构造方法
    public empoler(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;
    }
}
//这两个实际上都可以算作是代码当中的一部分,所以可以当作code的子类
class manager extends empoler{
    //构造方法
    public manager(String name,int age){
        //将变量值直接初始化给父类
        super(name,age);
    }
    public void method(){
        System.out.println(getAge()+"岁,叫做"+getName());
    }
 
 
}
 
class coder extends empoler{
 
    public coder(String name, int age) {
        super(name, age);
    }
    public void method(){
        System.out.println(super.getAge()+"岁,叫做"+super.getName());
    }
}

3.关于THIS跟SUPER

       1.this.通常适用于同一个类型当中,在一个构造方法当中,出现了一个与在同一个类当中的一个成员变量相同,如果要使用成员变量,那么就要使用this来进行使用,比较常见的使用方式有

class people{
    int name;
//使用构造方法的时候
    public  method(String name){
    this.name=name;    
}
}

      2.super.通常是使用在了继承的关系当中的,如果在子类当中有跟父类一样的变量名称,那么就可以使用super来直接调用父类当中的变量,如果不这样,那么就会遵循就近的原则,调用最近的成员方法以及相应的成员变量!(在tips的链接中有详细的情况,可以反复观看);

4.有关子类与父类的权限关系;

子类的关系跟父类的关系,在权限上,必须是子类>=父类,否则是不能够使用父类的

关于权限修饰符大小排序

private<(default)(默认值)<protected<public
 


三:final

1.简单介绍:final是一个JAVA当中的关键词,主要起到了固定具体类型数值的作用,自然也可以是一个成员方法

2.使用特点

根据使用场景的不同,大体分为三大类

1.成员变量:

凡是被FINAL所修饰的成员变量都必修要进行赋值,可以直接进行赋值,也可以在构造方法当中进行一个赋值,但是默认值是不可以的,在这里面默认值是一个无效值!

修饰过后,这个变量也就无法进行修改,只进行一次初始化就变成了一个常量(可以这样理解,但不是一个常量)

2.成员方法:

在这里,final也是可以对成员方法进行修饰的,一旦被修饰,比如说在继承关系当中,父类中的某个方法一旦被修饰,那么子类是不能够再调用父类的这个方法了

3.类

如果使用FINAL直接对类进行修饰,那么这个类将不能够作为一个父类存在,只能够成为一个子类!相当于一个太监,没有了孩子,但是仍然可以有父亲,可以当作一个子类来进行再次的使用

相关文章
|
1月前
|
编解码 Oracle Java
java9到java17的新特性学习--github新项目
本文宣布了一个名为"JavaLearnNote"的新GitHub项目,该项目旨在帮助Java开发者深入理解和掌握从Java 9到Java 17的每个版本的关键新特性,并通过实战演示、社区支持和持续更新来促进学习。
69 3
|
16天前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
83 43
Java学习十六—掌握注解:让编程更简单
|
1天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
24天前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
24 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
9天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
24天前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
34 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
26天前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
29 2
|
29天前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
22 3
|
29天前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
28 2
|
29天前
|
存储 Java 编译器
【用Java学习数据结构系列】初识泛型
【用Java学习数据结构系列】初识泛型
18 2