当前位置: 代码迷 >> 综合 >> JavaSE学习笔记(day5)
  详细解决方案

JavaSE学习笔记(day5)

热度:26   发布时间:2023-11-25 01:46:08.0

面向对象编程

object oriented programming (OOP)

面向对象编程与面向过程编程的区别

具体案例

  • 把大象装进冰箱

  • 面向过程编程语言

    • 分析出解决问题的步骤,把步骤一步步实现,面向对象编程语言更关注执行的过程
  • 1.开门(){}

  • 2.装大象(){}

  • 3.关门(){}

  • 面向对象编程语言

    • 先对整体进行分类,根据不同类的细节在进行深入处理。
  • 冰箱类{

    开门()

    关门()

    }

    大象类{

    }

    面向对象编程与面向过程编程是相辅相成的,不具有完全替代性

三个常见的成员

  • 属性filed 负责静态特征(数据)

    • 例如 int id ; id则为一个静态特征,也就是数据
  • 方法method 负责动态行为(对数据的操作)

    public void study(){
          
    System.our.println("正在学习!")
    }
    

    该方法为一个静态变量。

  • 构造器constructor 负责初始化对象

成员变量的默认值

  • 整型: 0
  • 浮点型: 0.0
  • 字符型: '\u0000'
  • 布尔型: false
  • 所有引用类型: null

类的定义

  • 类:类是一个模板,它描述一类对象的行为和状态。
  • 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状 态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等
  • 定义一个类的基本格式
    [修饰符] class 类名{ 0到多个构造器 0到多个成员变量 0到多个方法 0到多个初始化块 }
  • 修饰符可以写public final abstract或者不写,java类名要用大驼峰写法。一个java源文件(也就是文件后缀名为.java的文件)可以写多个类,但是里面只能有一个用public修饰的class;

代码实现

public class test {
    //静态特征(数据)int id;String sname;int score;int age;computer computer;void study() {
    System.out.println("我正在学习!使用的电脑是:" + computer.brand);}public static void main(String[] args){
    computer c1=new computer();c1.brand="游侠G5";c1.price=8000;computer c2=new computer();c2.brand="机械革命";c2.price=7000;testHello n1=new testHello ();n1.id=2080;n1.sname="马牛逼";n1.age=18;n1.computer=c2;n1.study();}
}

构造方法(构造器)Constructor

构造方法的核心作用

  • 用于对象的初始化,Java通过new关键字来调用构造器

声明格式

[修饰符] 类名 (形参列表){

//n个语句

}

构造方法的四个要点

  • 构造器通过new关键字调用;
  • 构造器虽然有返回值,但是不能定义返回值的类型(返回值的类型肯定是本类),不能再构造器里使用return返回某个值。
  • 如果没有定义构造器,则编译器会自动定义一个无参的构造器(方法) 如果已定义 则编译器不会自动添加。
  • 构造器的方法名必须和类名一致;

代码实现

/** *描述二维空间的一个点 */
public class Point {
    double x;double y;public Point (double _x, double _y){
     //构造器x = _x;y = _y;}public static void main(String[] , args){
    Point p1 = new Point(_x:3.0,_y:4);System.out.println(p1.x);}
}

创建对象4步和构造方法调用之间的关系

  • 分配对象空间,并将对象的成员对象初始化为0或空
  • 执行属性值的显示初始化 int x = 100
  • 执行构造方法,初始化对象
  • 返回对象的地址,给相关的变量

构造方法的重载

构造方法与普通方法一样,可以进行重载

/**** 模拟网站的账户(用于测试构造方法的重载)*/
public class User {
    int id;String uname;//用户名String pwd; //密码User(){
    }public User(int _id){
     //创建构造器1id = _id;}public User(int _id,String _uname,String _pwd){
    //创建构造器2id = _id;uname = _uname;pwd = _pwd;}public static void main(String[] args) {
    //调用构造器2User u1 = new User();  //调用无参构造器User u2 = new User(1001);//调用构造器1User u3 = new User(1002,"马牛逼","12321");}}

this的本质

本质

  • this 的本质就是当前对象的地址
  • 普通方法中,this总是指向调用该方法的对象
  • 构造方法中,this总是指向正要初始化的对象

代码示例

/**** this 的用法*/
public class User2 {
    int id;String name;String pwd;public User2(){
     //定义无参构造器}public User2(int id,String name){
    System.out.println("正在要初始化的对象"+this);//得到对象的地址//id = id 用法错误 如果想要吧id赋值给 代码第四行的id 必须使用thisthis.id = id;this.name = name;}public User2(int id,String name ,String pwd){
    this(id , name ); //调用了重载的构造器,这种调用必须位于构造方法的的第一行。this.pwd = pwd;}public void login(){
    System.out.println("要登陆:"+this.name+" 密码是:"+this.pwd);}public static void main(String[] args) {
    User2 u = new User2(101,"马牛逼");u.login();User2 u3 = new User2(102,"马牛逼","123456");System.out.println(u3.pwd);System.out.println( u3.name);}
}

Static关键字

核心用法

  • 用static声明的变量为静态成员变量,也为类变量,有以下特点:

    • 从属于类,只有一份,在类被载入时被显示格式化

    • 一般使用 “类名.类属性/方法” 来调用

    • 在static 方法中不可直接访问非static 成员

      ? //静态方法属于类 不属于对象

代码实现

public class TestStatic {
    int id;static String company = "大公司";static int companyId = 0;static {
    System.out.println("类被初始化时调用");companyId = 111222;}//静态方法static void printCompany(){
    //System.out.println(this); 在static方法里不能访问非static成员System.out.println(company);}void login(){
    System.out.println("登陆");}public static void main(String[] args) {
    TestStatic.printCompany(); //直接调用static 不用new对象TestStatic t1 = new TestStatic();t1.login();TestStatic t2 = new TestStatic();t2.login();}
}

static初始化模块

  • 构造方法用于对象的初始化
  • 静态初始化块,用于类的初始化操作
  • 可以初始化static属性
  • 在静态初始化块中不能直接访问非static成员。

代码块

在类中或者方法中,使用{}括起来的一段代码,就称它是代码块。

代码块分为:局部代码块、初始化代码块、静态代码块三种

  • 代码块的声明方式类似于一个没有名称的方法体,代码分实例块和静态块

    • 实例块:本质上放到构造方法当中执行的,因此每次创建对象的时候,都会执行初始化代码块; 可以通过反编译查看

      {

      ? //任何符合语法的Java代码

      }

    • 静态块: 静态代码块在加载字节码时就会自动调用,在主方法之前执行的。只执行一次,先于main方法。

      static{、

      ? //任何符合语法的Java代码

      }