首页 > 编程语言 >7月16日JavaSE学习笔记

7月16日JavaSE学习笔记

时间:2024-07-16 21:02:24浏览次数:11  
标签:code 构造方法 16 子类 笔记 JavaSE 父类 方法 public

方法(函数、过程)

语法

返回值类型 方法名(参数列表){方法体}

返回值类型:该方法必须返回的一个这个类型的对象

当方法不需要返回值时,返回值类型就定义为void

    public static int max(int a,int b){
        int max = a>b?a:b;//方法名和变量名不会冲突
        //return 返回数据,方法结束
        return max;
    }

void方法中可以写return,但是不能return null

    public static void printMax(int a,int b){
        //得到最大值
        //调用本类中已经定义好的方法
        int result = max(a,b);
        //打印
        System.out.println(result);
        return;//仅代表方法结束,终止方法的作用    void方法不能返回包括null的任何值
    }

参数

形参:定义方法时,参数列表的参数

实参:调用方法时,实际传入的参数

可变参数:

声明:sum(int... a){        }

参数类型跟着三个点表示这种类型的参数可以有很多个

使用:将可变参数当做数组使用

注意点:

        1.一个方法中只能有一个可变参数

        2.可变参数必须在参数列表的最后一个

        3.数量可变,类型不可变

        4.调用可变参数方法,可以使用数组代替

        5.可变参数可以不传

方法重载

在同一个类中,方法名相同,参数列表不同即为重载

    //定义一个方法,返回一个数组的最大值
    public static int max(int[] arr){//重载max()
        int max = arr[0];
        for(int i=0;i<arr.length;i++){
            if(arr[i]>max){
                max = arr[i];
            }
        }
        return max;
    }

参数列表不同的要素:

        1.参数的类型不同

        2.参数的个数不同

        3.参数的顺序不同


递归

调用自身

例:阶乘 !99 = 99*98*97*...*1

public static int jiecheng(int num){//阶乘
        if(num==1){//递归边界
            return 1;
        }
        return num*jiecheng(num-1);//递归
    }


排序算法

1.冒泡排序

    public static void maopaopaixu(int[] arr){
        //比较j趟,最后一个不需要排序
        for(int j=0;j<arr.length-1;j++){
            //比较一趟,最大值到数组最后
            //已经排好的j个元素不需要再重复排序
            for(int i=0;i<arr.length-j-1;i++){//数组越界的可能,i+1是最后一个
                //前后两个相邻的元素进行比较
                //如果前面的元素大,就交换位置
                if(arr[i]>arr[i+1]){
                    int temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
        }
    }

关于其他的排序算法会另外整理:2.选择排序  3.插入排序  4.快速排序...堆排序..桶排序...


面向对象

描述对象

声明属性和方法

在类中定义属性,用来存储数据,又叫做全局变量

public class Staff {//员工类:描述员工
    String code;//编号
    String sex;//性别
    String name;//姓名
    BigDecimal salary;//薪资  表示金融相关因为浮点型的精度问题要使用大十进制类BigDecimal
    
    //类中的方法可以直接调用本类中的属性
    public void work(){
        System.out.println(name+"正在工作");
    }

}

浮点类型在计算机中的存储和计算是有一定精度限制的。由于浮点数使用有限的二进制位数来表示,所以在进行精确的金融计算时可能会出现舍入误差或截断误差。

使用BigDecimal进行金融计算可以确保结果的精度和准确性。它通过将数值存储为字符串或整数数组来表示,并提供了一系列方法来执行加减乘除、取余等常见的数值操作,是处理金融相关计算的一种可靠和推荐的方式。

构造方法:对属性进行初始化

        1.构造方法没有返回值类型

        2.构造方法的方法名和类名一样

        3.如果一个类没有定义任何的构造方法,系统会给予一个默认的空的构造方法

        4.类中一旦自定义了任意的构造方法,系统给定的默认的构造方法就消失了

通过构造方法设置属性

局部变量:方法体或代码块中声明的变量

全局变量:在类中声明的变量

就近原则:在同一个代码块中优先找本代码块中的变量

当局部变量和全局变量重名的情况下,可以使用this关键字标注全局变量

    Staff(String name){//重载无参构造方法
        //将参数name设置给name属性
        this.name = name;
    }

    Staff(String code,String name,String sex,double salary){//重载
        this.code = code;
        this.name = name;
        this.sex = sex;
        this.salary = salary;
    }

对象

实例化对象:用new关键字开辟内存空间

        //实例化对象  new开辟内存空间
        Staff staff = new Staff();//构造方法,构造器
        //设置对象的属性   类中声明了哪些属性,对象中就有哪些属性
        staff.code = "YG10001";
        staff.name = "王大锤";
        staff.sex = "男";
        staff.salary = 10000;

        //每一个对象都是独立的,都有独立的内存空间,互不影响
        Staff staffA = new Staff();
        staffA.code = "YG10002";
        staffA.name = "赵小芳";
        staffA.sex = "女";
        staffA.salary = 12000;

        //调用对象的方法
        staff.work();
        staffA.work();

关于main方法:运行哪一个类当中的主方法,哪一个类就是主类


面向对象的特征(特性)

封装、继承、多态

1.封装

隐藏细节(属性和方法),不能让其他类随意访问

通过四个访问权限修饰符达到封装的效果

访问权限修饰符
修饰符publicprotecteddefaultprivate
含义公共的受保护的 / 家族性的默认的私有的
访问权限任意子类以及本包下的类本包中本类中
本类本包下子类其他包的子类本包下的类其他包的类
public
protected×
default××
private××××

对私有属性的封装,可以通过 getter 和 setter 方法实现外部的设置和获取

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

JavaBean 是一种符合特定模式的 Java 类。它是一种可重用的组件,用于构建 Java 应用程序。JavaBean 必须包含无参构造方法,并且可以通过 getter 和 setter 方法访问其属性。它通常用于表示实体类、数据传输对象(DTO)、POJO(Plain Old Java Object)等。JavaBean 是一种轻量级的组件模型,可以通过一些开发工具(如IDE)自动生成代码,使得开发人员可以更快速地创建和使用 JavaBean。

在IDEA工具中,可以通过右键代码 - Generate(或者快捷键Alt+Insert)快捷生成构造方法、getter和setter等

 

java对大小写敏感

某些情况下可能会通过解析 getName() 方法来得到 name 属性,属性名应小写


2.继承

一个类可以继承父类,子类中就具有父类中定义好的属性和方法

不是所有的属性和方法都能被调用到,public、protected、本包下父类的default

继承的作用:

        (1)代码重用

        (2)多态实现的基础

注意:

        (1)一个子类只能有一个直接父类(单继承)

        (2)java支持多重继承(儿子继承父亲,父亲继承爷爷)

继承用关键字 extends

方法重写:子类对父类中继承过来的方法重新定义

可以用 @Override 注解来标识和验证是否是重写的方法

注意:1.重写方法的返回值、方法名、参数列表不能发生变化

           2.重写的方法的访问权限只能更开放,不能更闭塞

class Plane{//父类
    protected String code;//protected:子类以及本包下的类可以访问到
    String color;

    public Plane(String code) {
        this.code = code;
    }

    public void fly(){
        System.out.println("看,天上有个飞机");
    }

}

class BigPlane  extends Plane{
    //子类继承父类
    //子类对父类中继承过来的方法重新定义:方法重写
    //可以使用@override注解来验证是否是重写的方法
    @Override
    public void fly(){
        System.out.println("看,天上有个大飞机!!!");
    }

}

父子类之间的构造方法:

子类的构造方法中首行必须调用父类的构造方法

默认调用父类的无参构造方法

父类中没有无参构造方法时,子类构造方法中必须明文声明调用父类哪一个构造方法

使用 super 关键字调用父类的构造方法

    public BigPlane(String code){
        super(code);
    }

    public BigPlane(String code,String color){
        //super(code,color);
        super(code);
        this.color = color;
    }

向上转型:用父类的指针指向子类的对象

调用方法看对象

调用属性看声明

        Plane p =new BigPlane("C919");//向上转型:用父类的指针指向子类的对象
        p.code = "BBBBB";//修改父类的属性

        BigPlane bp2 = (BigPlane)p;//强转成子类BigPlane类型
        bp2.code = "CCCCC";//修改子类的属性

        p.fly();//调用子类的方法
        p.printcode();

假设父类Plane和子类BigPlane各自定义了一个同名属性code,使用父类的指针p指向了子类的对象,此时p调用的方法是子类BigPlane的方法,但p.code修改的是父类Plane的属性。

父类和子类各自定义的属性相互独立存储,不存在冲突


3.多态

调用方法时可能出现多种结果,叫做多态

多态的分类:

静态多态:重载造成,在类编译时就可以确定调用的是哪个方法

动态多态:重写造成,只有在执行到该行代码时,才能确定执行的是哪个类中的方法

public class EasyE {
    //简单工厂设计模式,静态static没有工厂对象
    public static Parent getObj(int a){
        if(a==1){
            return new SonA();
        }else if(a==2){
            return new SonB();
        }else {
            return new Parent();
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        Parent p = getObj(num);//p这个变量可能指向任意一个子类的对象
        p.method();//多态:调用方法时可能会出现多种结果
    }

}

class Parent{
    public void method(){
        System.out.println("parent");
    }

}

class SonA extends Parent{
    public void method(){
        System.out.println("SonA");
    }
}

class SonB extends Parent{
    public void method(){
        System.out.println("SonB");
    }
}

标签:code,构造方法,16,子类,笔记,JavaSE,父类,方法,public
From: https://blog.csdn.net/qq_63161848/article/details/140455428

相关文章

  • 信创学习笔记(四),信创之数据库DB思维导图
    创作不易只因热爱!!热衷分享,一起成长!“你的鼓励就是我努力付出的动力”一.信创学习回顾1.信创内容信创内容思维导图2.信创之CPU芯片架构信创之CPU芯片架构思维导图3.信创之操作系统OS信创之操作系统OS思维导图二.信创之国产数据库DB思维导图用一张图学习......
  • 设计模式之简单工厂模式(学习笔记)
    定义简单工厂模式(SimpleFactoryPattern)是一种创建型设计模式,它定义一个用于创建对象的接口,但由一个单独的类来实现实际创建的工作。简单工厂模式通过在一个类中集中管理对象的创建过程,可以减少客户端与具体类之间的耦合,使得代码结构更加清晰和易于维护。通过专门定义一个类来负......
  • 中国白酒品鉴知识培训一-笔记
    一白酒文化白酒起源于农业 酒祖仪狄 杜康依傍长江而栖的四川、贵州,一直是我国白酒文化的重要发祥地和传承地。是舞动中国白酒金三角龙头,打造世界顶尖白酒的基地。我国是世界上最早酿酒的国家之一,对世界酿酒技术的发展作出了巨大贡献。酿造白酒离不开水、土、气、气、......
  • 点分树 学习笔记
    前言还真没有。点分树点分树是个神秘的东西。点分树是通过更改原树形态使树的层数变为稳定\(\logn\)的一种重构树。常用于解决与树原形态无关的带修改问题。是这样的,有些树上问题,看起来用别的树形结构做不了,点分治能做。但是它不仅多次询问(\(n\)同级),还带修,有时候甚至......
  • Java基础-学习笔记04
    04运算符进制1.运算符逻辑与&和短路与&&共同点:两个条件都为true时,结果为true,否则为false。&逻辑与:不管第一个条件是否为false,第二个条件都要判断;&&短路与:如果第一个条件判断为false,则第二个条件不会判断。逻辑或|和短路或||共同点:两个条件只要有一个成立,结果......
  • 第八天笔记(项目测试工具悟道使用)
    禅道一、禅道的介绍(1)定义禅道是一个项目管理工具,也是一个bug管理工具,还是一个用例管理工具。(2)作用:为了解决众多企业在管理中出现混乱,无序的现象,开发出来(3)来源:禅道属易软天川公司(4)禅道是集于产品管理,项目管理,测试管理于一身,同时包含事务管理,组织管理8众多功能,是中小企业管理......
  • JavaSE的整体总结
    JavaSE(JavaStandardEdition)是Java编程语言的基础,广泛应用于各种开发场景。本文将详细介绍JavaSE的基本概念和核心功能,包括初识Java、数据类型和变量、运算符、程序逻辑控制、方法的使用、数组的定义与使用、类和对象、继承和多态、抽象类和接口、String类以及异常处理。1.......
  • 7/16 训练笔记
    闲话插,就硬插,插完就过了(P4781【模板】拉格朗日插值模板题,写拉格朗日插值即可。代码:#include<bits/stdc++.h>#defineintlonglong#definerep(i,l,r)for(inti=l;i<=r;i++)usingnamespacestd;constintmod=998244353;intx[2010],y[2010],n,k;int......
  • MySQL 数据库 day 7.16
        ok了家人们今天继续记录一下数据库,看看今天学了什么。一.事物概述1.1环境准备--账户表createtableaccount(idintprimarykeyauto_increment,namevarchar(20),moneydouble);insertintoaccountvalues(null,'张三',1000......
  • 低开开发笔记(八): 低代码编辑器实现撤销回退(命令模式,防抖处理)
    好家伙, 0.代码已开源https://github.com/Fattiger4399/ph_questionnaire-.git 1.事件触发我们先从事件的触发开始讲起大致上我们有两个思路可以选择1.监控用户行为2.监控数据变化 两种选择都会有较难处理的部分,这里我们先选第二个选项 关于监控数据,首......