类的定义

1. 成员变量(字段

2. 方法

3. 定义格式

public class 类名{
	0-N个字段(成员变量)
    
       
    0-N个方法;
    
}

对象的创建和使用

1. 创建方式 类名 类变量名 = new 类名();  

Student stu = new Student();

2. 给对象成员变量设置值 类变量名.字段名=值  

student.name="上云";

3. 获取成员变量的值,数据类型 变量名 = 类变量名.字段名

String name = student.name;

4. 实例方法的调用,类对象名.方法名

student.showInfo();

 

java 中为什么定义类 java定义类名_java

构造方法

1. 也叫构造器(构造方法),是用来创建对象的,当你创建对象时,一定执行

2. 构造方法:

  • 也有修饰符
  • 不具备方法的返回值类型
  • 可以带参数
  • 默认的构造方法,里面没有任何内容
  • 构造方法可以重载

 3. 构造方法,创建对象时,可以传参

Book book = new Book("E3层");

4. 注意:不提供构造方法时,默认提供一个不带参数的构造器

实例方法

1. 定义方式:

  • 具有修饰类型
  • 有返回值类型
  • 有方法名和参数列表

2. 定义

修饰符 返回值类型 方法名(参数列表){

}

3. 调用方式,使用对象调用。  

对象变量名.方法名

4. 空指针异常(没有去创建对象,就是调用对象的属性或者是方法)  

导包

1. 如果存在重名的情况,需要去选择自己的包 alt + enter

方法

1. 生活中的方法:处理某件事或者解决某个问题的办法。

2. java中的方法:用来解决某件事情或者实现某个功能的办法。

java 中为什么定义类 java定义类名_servlet_02

     3.方法的定义  

修饰符 返回值类型 方法名(形式参数){
    方法体
}
//实现从老代码迭代成新代码
//修饰符      方法无返回   方法名   参数列表
public static void      print(String str) {
        
}

4. 带返回类型的方法定义

修饰符 返回值类型 方法名(形式参数){
    方法体
        
    return 返回值类型;
}

5. return 的作用:结束当前的方法,可以单独用,还可以带返回类型用

6. 返回类型

  • 八大基本数据类型
  • 引用数据类型
  • void(没有返回)

7. 需求:定义加法计算器,带两个参数的,方法返回类型为 int

public static int add(int num1,int num2){
        int ret = num1 + num2;
        return ret;
}

8. 需求:求5个数的和,返回类型 int

public static int addSum(int... nums) {
        int sum = 0;
        for (int num : nums) {
            sum += num;
        }
        return sum;
    }

9. 注意:方法的可变参数底层实际上就是数组

java 中为什么定义类 java定义类名_java 中为什么定义类_03

方法的重载

1. 需求1.0:  

  • 定义一个求浮点型 double 的计算器
  • 定义方法分别去求 float 计算器
  • 定义方法分别去求 short 计算器
  • 定义方法区求 String 字符串的拼接
  • 定义打印 String 类型的字符串方法
  • 定义打印 int 类型的方法
  • 定义:同一个类里面,方法允许存在一个以上的同名方法,要求参数列表不同
  • 参数列表不同:
  • 1.参数类型不同
  • 2.参数顺序不同
  • 3.参数个数不同
  • 和返回值类型无关

java 中为什么定义类 java定义类名_java 中为什么定义类_04

JVM内存模型变化

1. 栈:是线程私有的,生命周期与线程相同,线程之间不共享,里面拥有多个栈帧

  • 局部变量
  • 方法内定义的局部变量
  • 参数列表变量
  • 对象引用(指向对象的引用地址)指向堆里面

2. 堆:是jvm 内存模型最大的一块,被所有共享,在jvm 启动时所创建。

  • 存放对象实例(new 对象)并且会给初始值
  • 需要垃圾回收机制回收垃圾,
  • 配置大小:-Xmx -Xms
  • 如果堆中的对象没有被栈引用时,会被垃圾回收器不定时回收。

3. 字符串常量池:存储在类加载完成,经过验证,解析阶段的一些常量字符串。

4. 程序计数器pc:

  • 是一块很小的内存区域,记录当前线程执行的字节码的行号指示器,可以去通过计数器控制,指令,循环,跳转。
  • 线程私有,每条线程都有自己的程序计数器

5. 方法区

  • 类信息,记录类的字节码信息,常量池(String 和 包装类)

6. GC(垃圾回收器):不定时的回收垃圾,回收一些没有引用的堆内存的垃圾,不需要程序员手动操作。

java 中为什么定义类 java定义类名_1024程序员节_05

jvm方法执行内存模型变化

java 中为什么定义类 java定义类名_java 中为什么定义类_06

方法的递归

1. 定义:方法自己调用自己

2. 需求:

  • 不使用递归计算 5 的阶乘
int num = 5;
int ret = 1;
for (int i = 0; i < 5; i++) {
    ret *= num--;
}
System.out.println(ret);
public static int recursion(int num) {
    if (num == 1) {
        return 1;
    }
    int recursion = recursion(num - 1);
    int ret = num * recursion;
    return ret;
}

java 中为什么定义类 java定义类名_jvm_07

static 关键字

1. static:是一个修饰符,表示静态的,可以用来修饰,方法、字段、代码块、内部类,最优先加载进内存的。

2. 注意:

  • static 关键字,表示该资源属于类(而不是属于类对象)。只要使用 static 修饰的,直接使用类名.来调用,
    不用创建对象
  • 在非 static 方法中,可以去访问 static 方法,但是最好用类名.来调用。
  • 在 static 方法中,不能直接访问普通方法
  • 静态代码块优先于一切先执行
static {
    System.out.println("static 修饰的代码块");
}

3. 什么时候使用 static 修饰的字段以及方法和代码块

  • 在开发中,写工具类的时候。
  • 资源加载,加载配置文件(mysql jdbc)

深入变量

变量的定义语法:

数据类型 变量名 = 值;

根据位置不同,分为两大类:

1. 成员变量

  • 类成员变量(类名.字段名调用)
  • 生命周期:从类加载到程序结束
  • 使用 static 修饰的,直接定义到类里面的
  • 实例成员变量
  • 生命周期:从创建对象开始到GC垃圾回收器回收垃圾结束
  • 直接定义到类里面的

2. 局部变量

  • 生命周期:从变量定义开始,到最近的花括号结束}
  • 方法内部的变量
  • 参数列表
  • 代码块里面的变量

3. 什么时候使用成员变量,什么时候使用局部变量?

  • 考虑变量的生存时间(影响内存的开销)
  • 能减少作用域都去减少(减少内存开销)
  • 定义工具类时(static 用起来比较方便)成员变量封装好,利于我们方法使用

package

1. 类的全限定类名(反射使用)

抽象类

1. 需求:求圆(Circle),矩形(Rectangle)的面积

2. 使用 abstract 关键字修饰,并且没有方法体

3. 使用 abstract 修饰的类特点:

  • 必须使用 abstract 关键字修饰,方法没有方法体,留给子类去实现/重写
  • 不能使用 private 以及 static 和 final
  • 抽象方法必须定义到抽象类中或者接口
  • 不能实例化
  • 抽象类可以有普通的方法
  • 抽象类构造器不能够私有化

java 中为什么定义类 java定义类名_java_08

接口

1. 什么是接口  

统一接口后的意义:根据规范设计产品,可以做到适配性。

  • 硬件接口:两个设备之间的连接方式,包含数据传输协议
  • type-c,usb,耳机接口
  • 软件接口:程序代码,是一种规范
  • 买鼠标不会去关心是哪家厂商的,是什么接口

JAVA 接口

1. 定义:使用 interface 关键字

//使用 interface 代替传统的 class
public interface 类名{
    //都是抽象方法
    void usb();
    //定义常量
    public static final int EANBLE = 1;
}

2. 注意:

  • 接口里面只能去定义抽象方法
  • 抽象方法默认提供了 public abstract 修饰符

  • 接口不能实例化(和抽象类一样)  

 3. 接口怎么去实现

  • 使用 implements 关键字

4. 接口支持多实现,分别把每个接口的抽象方法都去实现了

java 中为什么定义类 java定义类名_java_09

 5. 接口的多继承

java 中为什么定义类 java定义类名_java_10

 

抽象类和接口怎么选择

1. 都可以使用

  • 如果你不需要具体的实现时,就用接口。
  • 如果说你除了定义规范还有一定的功能,你就用抽象类

模板方法设计模式需求:

1. 统计不同操作的时间用时。

  • 使用 String 拼接一万次
  • 使用 int 累加 一万次