重生之我要精通JAVA--第二周笔记

发布于:2024-05-04 ⋅ 阅读:(26) ⋅ 点赞:(0)

方法

方法是程序中最小的执行单元。

方法分为:最简单的方法定义一和调用,带参数的方法定义和调用,带返回值的方法定义和调用。具体内容和C语言类似。

固定格式:

punlib static 返回值类型 方法名 (参数) {
    方法体;
    return 返回值;
}

注意事项

  • 方法不调用就不执行
  • 方法与方法之间是平级关系,不能相互嵌套
  • 方法的编写顺序和执行顺序无关
  • 如果返回类型为void,return可以省略或者只写return
  • return下面不能编写代码,因为执行不到,属于无效代码

方法的重载

  • 在同一个类型中,定义了多个同名的方法,这些同名的方法具有同种功能
  • 每个方法具有不同的参数类型或参数个数,这些同名的方法,就构成了重载关系

简单记:同一个类中,方法名相同,参数不同的方法。与返回值无关。(个数不同,类型不同,顺序不同)

数据类型

基本数据类型

​ 数据值是存储才自己的空间中

特点:赋值给其他变量,也是赋的真实的值。

引用数据类型

​ 数据值是存储在其他空间中,自己空间中存储的是地址值。

特点赋值给其他变量,赋的地址值。

int[] arr1 = {1, 2, 3};
int[] arr2 = arr1;

传递引用数据类型时,传递的是地址值,形参的改变,影响实际参数的值

附加:随机数创建: Random r = new Random();

​ int randomIndex = r.nextInt(chs.length);

二维数组

静态初始化

  • 格式:数据类型[] [] 数组名 = new 数据类型[] [] {{元素1,元素2},{元素1,元素2}};
  • 范例:int[] [] arr = new int[] []{{11,22},{33,44}};
  • 简化格式:数据类型[] [] 数组名 = {{元素1,元素2},{元素1,元素2}};

动态初始化

  • 格式:数据类型[] [] 数组名 = new 数据类型[m] [n];
  • 范例:int[] [] arr = new int[2] [3];

面向对象

类和对象

  • 类(设计图):是对象共同特征的描述;
  • 对象:是真实存在的具体东西。

在Java中,必须先设计类,才能获得对象。

如何定义类
public class 类名 {
	1、成员变量(代表属性,一般是名词)
	2、成员方法(代表行为,一般是动词)
	3、构造器
	4、代码块
	5、内部类
}
如何得到类的对象
//类名 对象名 = new 类名();
Phone p = new Phone();
定义类的补充注意事项
  • 用来描述一类事物的类,专业叫做:Javabean类。在Javabean类中,是不写main方法的。
  • 在之前编写的main方法的类,叫做测试类。我们可以在测试类中创建javabean类的对象并进行赋值调用。
  • 类名首字母建议大写,需要见名知意,驼峰模式。
  • 一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。实际开发中建议还是一个文件定义一个class类。
  • 成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值;一般无需制定初始化值,存在默认值。
对象的成员变量的默认值规则
数据类型 明细 默认值
byte、short、int、long 0
基本类型 float、double 0.0
boolean false
引用类型 类、接口、数组、String null

面向对象三大特征

  1. 封装(Encapsulation):封装是将对象的状态和行为结合在一起,并对外部隐藏对象的内部实现细节的过程。通过封装,对象的内部数据只能通过对象的方法来访问,从而保证了数据的安全性和一致性,同时也降低了对象之间的耦合度。
  2. 继承(Inheritance):继承是一种机制,允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以使用父类的属性和方法,同时可以在不修改父类的情况下,扩展或修改父类的行为。通过继承,可以实现代码的重用和扩展,提高了代码的可维护性和可扩展性。
  3. 多态(Polymorphism):多态是指同一个方法调用可以在不同的对象上有不同的行为。在Java中,多态可以通过方法重写(override)和方法重载(overload)来实现。方法重写是指子类重新定义父类的方法,以实现特定的行为;方法重载是指在同一个类中,可以定义多个同名方法,但参数列表不同。多态提高了代码的灵活性和可扩展性,使得代码更易于理解和维护。
封装
  • 对象代表什么,就得封装对应的数据,并提供数据对应的行为
private关键字
  • 是一个权限修饰符
  • 可以修饰成员(成员变量和成员方法)
  • 被private修饰的成员只能在本类中才能访问

就近原则和this关键字

this直接使用成员变量。

public class GirlFriend {
    private int age;
    public void method(){
        int age = 10;//就近
        System.out.println(age);//就近
        System.out.println(this.age);
    }
}

构造方法

概述
  • 创造对象的时候,虚拟机会自动调用构造方法,作用是给成员变量进行初始化的
作用
  • 创造对象的时候,由虚拟机自动调用,给成员变量进行初始化
有几种,各自作用是什么
  • 无参数构造方法:初始化对象时,成员变量的数据均采用默认值
  • 有参数构造方法:初始化对象时,同时可以为对象进行赋值
注意事项
  • 任何类定义出来,默认自带无参数构造器,写不写都有
  • 一旦定义了有参数构造器,无参数构造器就没有了,需要自己写
  • 建议任何时候都写上空参和带全部参数的构造方法
标准的JavaBean类
  1. 类名需要见名知意
  2. 成员变量使用private修饰
  3. 提供至少两个构造方法
    • 无参构造方法
    • 带全部参数的构造方法
  4. 成员方法
    • 提供每一个成员变量对应的setXXX()/getXXX()
    • 如果还有其他行为,也需要写上

成员变量和局部变量的区别

区别 成员变量 局部变量
类中位置不同 类中,方法外 方法内、方法声明上
初始化值不同 有默认初始化值 没有,使用之前需要完成赋值
内存位置不同 堆内存 栈内存
生命周期不同 随着对象创建而存在,随着对象消失而消失 随着方法的调用而存在,随着方法的运行结束而消失
作用域 整个类中有效 当前方法中有效

字符串

API

API:应用程序编程接口

简单理解:API就是别人已经写好的东西,我们不需要自己编写,直接使用即可。

String概述

​ java.lang.String类代表字符串,Java程序中所有字符串文字都为此类的对象。

注意点

字符串内容是不会发生改变的,它的对象在创建后不能被更改。

创建String对象的两种方式
  1. 直接赋值:String name = “xiaoduyyy”;

  2. new:

    构造方法 说明
    public String() 创建空白字符串,不含任何内容
    public String(String original) 根据传入的字符串,创建字符串对象
    public String(char[] chs) 根据字符数组,创建字符串对象
    public String(byte[] chs) 根据字节数组,创建字符串对象

Java内存模型

当使用双引号进行直接赋值的时候,系统会检查该字符串在串池中是否存在,如果不存在则创建新的,如果存在则复用。

字符串比较

举例
String s1 = new String("abc");//记录堆里的地址
String s2 = "abc";//记录串池中的地址
System.out.println(s1 == s2);//false
比较
  • boolean equals方法(要比较的字符串)---------------------------完全一样结果才是true,否则为false
  • boolean equalsIgnoreCase(要比较的字符串)--------------------忽略大小写的比较

charAt( )--------------用来获取字符串中指定位置的字符

String replace(旧值,新值) 替换

StringBuilder

StringBuilder常用方法
方法名 说明
public StringBuilder append (任意类型) 添加数据,并返回对象本身
public StringBuilder reverse() 反转容器中的内容
public int length() 返回长度(字符出现的个数)
public String toString() 通过toString()就可以说实现把StringBuilder转换为String
public StringBuilder deleteCharAt(位置) 删除该位置的字符
  • 因为StringBuilder是Java已经写好的类,java在底层对他做了一些特殊处理,打印对象不是地址值而是属性值。
应用场景
  1. 字符串的拼接
  2. 字符串的反转

StringJoiner

StringJoiner构造方法
方法名 说明
public StringJoiner (间隔符号) 创建一个StringJoiner对象,制定拼接时的间隔符号
public StringJoiner (间隔符号,开始符号,结束符号) 创建一个StringJoiner对象,制定拼接时的间隔符号、开始符号、结束符号
StringJoiner成员方法
方法名 说明
public StringJoiner add (新添加的内容) 添加数据,并返回对象本身
public int length() 返回长度(字符出现的个数)
public String toString() 返回一个字符串(该字符串就是拼接之后的结果)

集合

集合和数组的对比

  • 数组长度固定,集合长度可变
  • 数组可以存储基本数据类型,可以存引用数据类型,集合可以存引用数据类型,而存基本数据类型就需要包装类

ArrayList成员方法

方法名 说明
boolean add(E e) 添加元素,返回值表示是否添加成功
boolean remove(E e) 删除指定元素,返回值表示是否删除成功
E remove(int index) 删除指定索引元素,返回被删除的元素
E set(int index,E e) 修改指定索引下的元素,返回原来的元素
E get(int index) 获取指定索引的元素
int size() 集合的长度,也就是集合中元素的个数

static

static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量。

静态变量

特点:被该类所有对象共享。

调用方式:类名调用(推荐)、对象名调用

静态方法

特点:多用在测试类与工具类中、Javabean类很少用

工具类

  • Javabean类:用来描述一类事物的类。比如Student,Dog等
  • 测试类:用来检查其他类是否书写正确,带有main方法的类,是程序的入口
  • 工具类:不是用来描述一类事物的,而是帮我们做一些事情的类

注意事项

  • 静态方法只能访问静态变量和静态方法
  • 非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法
  • 静态方法中没有this关键字

重新认识main方法

  • public:被JVM调用,访问权限足够大

  • static:被JVM调用,不用创建对象,直接类名访问

    ​ 因为main方法是静态的,所以测试类中的其他方法也是需要静态的

  • void:被JVM调用,不需要给JVM返回值

  • main:一个通用的名称,虽然不是关键字,但是被JVM识别

  • String[] args:以前用于接受键盘录入数据的,现在没用

继承

  • Java中提供一个关键字extends,用这个关键字,我们可以让一个类与另一个类建立起继承关系

    public class Student extends Person{}
    
  • Student称为子类(派生类),Person称为父类(基类或超类)

什么时候用继承?

当类与类之间存在相同(共性)的内容,并满足子类时父类的一种,就可以考虑使用继承来优化代码。

继承的特点

  • Java只支持单继承
  • Java不支持多继承,但支持多层继承
  • Java中所有的类都直接或者间接继承与Object类
  • 子类只能访问父类中非私有的成员

继承中成员变量访问特点

先在局部位置找,本类成员位置找,父类成员位置找,逐级往上。

如果出现了重名:

System.out.println(name);//从局部位置往上找
System.out.println(this.name);//从本类成员位置往上找
System.out.println(super.name);//从父类成员位置往上找

方法的重写

当父类的方法不能满足子类的需求的时候,需要进行方法的重写

书写格式

​ 在体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法。

@Override重写注释

  1. @Override是放在重写后的方法上,校验子类重写是语法是否正确。
  2. 加上注解后如果有红色波浪线,表示语法错误。
  3. 建议重写方法都加@Override注解,代码安全,优雅。

注意事项和要求

  • 重写方法的名称、形参列表必须与父类中的一致
  • 子类重写父类方法时,访问权限子类必须大于等于父类(空着不写<protected<public)
  • 子类重写父类方法时,返回值类型子类必须小于等于父类
  • 建议:重写的方法尽量和父类保持一致
  • 私有方法不能被重写
  • 子类不能重写父类的静态方法,如果重写会报错
  • 只有被添加到虚方法表中的方法才能被重写

已经到底啦!!