java学习(类和对象)

本文深入探讨了面向对象编程的概念,包括类与对象的区别,强调了面向对象是如何模拟现实世界逻辑的。文章通过实例详细解释了Java中的类定义、对象创建、字段与方法、构造方法的使用,以及代码块的作用,特别是构造方法的执行顺序和重载。面向对象编程的核心在于对象的创建和交互,理解这些概念对于提升代码组织和协作效率至关重要。
摘要由CSDN通过智能技术生成

1.今日导师双选,排名靠前但被拒三次、意难平。
2.简历还在投递中,面试时更注重本科项目经历。
3.研究生阶段,计算机学术?代码能力?哪个重要?
4.循环《可能否》,期待变强。。。

一、简介

使用面向对象的思想进行程序设计和开发,并不会简化代码,只会使代码量变多,但是该思想更接近现实逻辑。
java是一门面向对象的语言,面向对象是指当我们需要做某一件事情的时候,不应该想着自己如何做,那叫面向过程(C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题),第一想法是找会做件事情的人来完成,这就叫做面向对象。

面向对象注重的是对象,也就是参与过程所涉及到的主体。是通过逻辑将一个个功能实现连接起来,更适合合作者开发

面向过程: 1.把冰箱打开 2. 把东西放入 3. 冰箱关起来
面向对象: 打开冰箱,储存,关闭都是对冰箱的操作,是冰箱被动的行为。冰箱就是一个对象,所以只要操作冰箱所具备的功能,都要定义在冰箱中(即类)。

二、类与对象的理解

**类就是一类对象的统称。对象就是这一类具体化的一个实例。**类可以比喻为一个一个的模板,里面可能会含有许多属性或者功能。而按照模板实例化产生的叫对象。一个模板能够实例化多个对象。
在这里插入图片描述

对象

在这里插入图片描述
在这里插入图片描述

类的定义(c的结构体相似)

在这里插入图片描述
在这里插入图片描述
内存布局
在这里插入图片描述

注意
1)new 关键字用于创建一个对象的实例。 其中这个对象实例又叫属性或成员变量或字段。
2) 使用 . 来访问对象中的属性和方法。
3)同一个类可以创建多个实例。

类的成员

**类的成员可以包含以下:字段、方法、代码块、内部类和接口等。**此处重点介绍前面三个。

字段/属性/成员变量

在类中、而方法外部定义的变量称为 “字段” 或 “属性” 或 “成员变量”(三种称呼都可以, 一般不会严格区分)
在这里插入图片描述
null 在 Java 中为 “空引用”, 表示不引用任何对象. 类似于 C 语言中的空指针. 如果对 null 进行 . 操作就会引发异常。
因此,字段就地初始化:

public class Person {
    String name = "张三";
    int age = 18; 
}
class Test {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.name);
        System.out.println(person.age);
   }
}
// 执行结果
张三
18

方法 (c语言是不能在结构体中定义函数的)

用于描述一个对象的具体行为叫做方法。
在这里插入图片描述

public class Person {
    int age = 18;
  	String name = "张三";
    public void show() { //show方法
   System.out.println("我叫" + name + ", 今年" + age + "岁");
   }
}
class Test {
    public static void main(String[] args) {
        Person person = new Person();
        person.show();
   }
}
// 执行结果
我叫张三, 今年18

构造方法

在这里插入图片描述
构造方法是一种特殊方法, 使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作。

  • new 执行过程:

1)为对象分配内存空间
2)调用对象的构造方法

  • 语法规则:

1)方法名称必须与类名称相同。
2)构造方法没有返回值类型声明。
3) 每一个类中一定至少存在一个构造方法(如果没有明确定义,则系统自动生成一个无参构造方法)

  • 注意事项:

1)如果类中没有提供任何的构造函数,那么编译器会默认生成一个不带有参数的构造函数
2)若类中定义了构造方法,则默认的无参构造将不再生成,如果再需要调用无参的构造方法则需要手动写一个。
3)构造方法支持重载,规则和普通方法的重载一致。(对返回值不作要求,方法名相同,参数不同可包括参数个数不同或参数类型不同)

  • 示例
class Person{
    private double age;
    private String name;
    public Person(){
        System.out.println("这是一个无参的构造方法");
    }
    public Person(double age, String name){
        this.age = age;
        this.name = name;
        System.out.println("这是一个有参的构造方法");
    }
    public void show(){ 
		System.out.println("name: "+name+" age: "+age); 
 	}
}
public class Main{
    public static void main(String[] args){
        Person person1 = new Person();
        Person person2 = new Person(13, "张三");
        person2.show();
    }
}
// 结果为:
// 这是一个无参的构造方法 
// 这是一个有参的构造方法
// name:张三 age:13

构造方法不仅仅可以构造对象,同时也可以帮助我们进行成员变量的初始化
上述代码里面的构造方法其实构成了重载(方法名相同、参数列表不同、返回值不做要求)

代码块

在这里插入图片描述

  • 分类

根据代码块定义的位置以及关键字,又可分为以下四种:

1)普通代码块(又叫本地代码块,了解);2) 构造代码块;3) 静态代码块;4)同步代码块(后续讲解多线程部分再谈)
普通代码块:定义在方法中的代码块。
构造块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。
静态代码块:使用static定义的代码块。一般用于初始化静态成员属性。

  • 实例代码
class Person{
    private double age;
    private String name;
    public Person(){
        System.out.println("这是一个无参的构造方法");
    }
	// 实例代码块
    {
        this.name = "Yb";
        this.age = 15;
        System.out.println("构造代码块");
    } 
    // 静态代码块
    static{
        // 不能用 this
        // this.age = 15; 会报错
        System.out.println("静态代码块");
    }
}
public class Main{
    public static void main(String[] args){
        Person person1 = new Person();
        Person person2 = new Person();
    }
}
// 结果为:
/**
静态代码块
构造代码块
这是一个无参的构造函数
实例代码块
这是一个无参的构造函数
*/

代码块中的重点是主要了解实例代码块、静态代码块、构造方法的运行顺序。总结:先运行的是静态代码块,再运行实例代码块(构造代码块),最后运行构造方法。静态代码块内的只运行一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值