类和对象

本文介绍了面向对象编程的基本概念,包括类和对象的区别、面向对象的特点(封装、继承、多态)、类的定义与实例化过程,以及静态方法和属性的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类和对象
1.什么是类(自行车的设计图)
什么是对象(一辆辆的自行车)
2.为什么要设计类和对象的机制(面向对象编程)
状态 + 行为
属性 方法
3.面向对象的三大特点:封装|继承|多态
4.语法:
1)定义类的语法
修饰符(modifier)class 类名称{
1.属性
2.方法/静态方法
3.构造方法(必须有,否则编译器会自动补一个)
}
2)如何定义属性
修饰符(modifier)变量类型 变量名称: 默认值:
3)如何定义方法
修饰符(modifier) 返回值类型 方法名称(形参列表){
}
public static int[] ABC (int a){
}
4)如何定义构造方法
修饰符(modifier)类名称(形参列表){
}
5.构造对象的语法|对象实例化的语法
create object |instance
类名称 变量名称=new 类名称(实参列表)
(引用类型-类名称)
1)new关键字 计算对象内存大小,在堆中申请内存空间,把空间都初始化为0x0
2)
一个文件中只能有一个public的类,该类的名称必须和文件名一样一个类会生成一个class字节码文件



public class Test{
    public static void main(String[] args){
        Person p=new Person("小比特",2,4);
        System.out.println(p.toString());
    }
}
class Person{
    public String name=null;
    public int gender=0;
    public int age=0;
    public Person(){
        
    }//构造方法允许重载
    public Person(String n,int g,int a){
        name=n;
        gender=g;
        age=a;
    }
    public String toString(){
        return String.format("Person(%s,%d,%d)",name,gender,age);
    }
}
class Student{
    //没有明确的定义构造方法
    //虚拟机会自动定义一个构造方法
    //public Student(){
    //}
}

Person p=new Person(“小比特”,2,4);
3. 1. 2.
1)定义了一个Person类的对象1)计算对象需要的内存大小,开辟空间,初始化为0p=malloc(sizeof(Person));memset(p,0x0,sizeof(Person));
2)调用构造方法,对属性初始化
3)构造方法调用结束,返回一个指向对象的引用
Person temp=新对象;
在这里插入图片描述
类和对象的内存模型
类 方法区
属性 堆区对象中存储的最主要的就是属性,也可以找到方法区中对象相对应的类
语法:
1)如何访问对象的属性
在类的内部(在类的内部访问类的属性的调用类的方法):直接通过属性名称访问即可
在类的外部:直接通过方法名称访问即可
2)如何调用对象的方法
在类的内部:引用.属性名
在类的外部:引用.方法名称(实参列表)


class Person{
    int a;
    int b;
    public void methodA(){
        a=10;
        System.out.println(a);
         methodB();
    }
    public void methodB(){
    }
}
class Main{
    public static void main(String[] agrs){
         Person p=new Person();
         p.a;//int[] a; a.length;
         p.methodA();
    }
}

容易混淆的地方:
嵌套调用:System.out.println(Arrays.toString(rotate(new int[]{1,2,3,4})));
链式调用

this关键字的使用


class Person{
    int a;
    int b;
    public void methodA(){
        a=10;
        System.out.println(a);
         methodB();
    }
    public void methodB(){
    }
}
class Main{
    public static void main(String[] agrs){
         Person p=new Person();
         p.a;//int[] a; a.length;
         p.methodA();
    } 
}

1)在构造方法中调用其它构造方法(调用语句必须放在第一行)
2)通过this访问属性或方法(一般出现在发生了命名遮挡的时候【name shadowing】)
3)this代表当前对象的引用注:普通属性和普通方法其实都绑定着一个隐含对象

class Person{
    public String name;
    pubic int age;
    public Person(String name,int age){
        this.name=name;
        this.age=age;//2
    }
    public Person self(){
        return this;
    }
    public String name(){
        return this.name;
    }
}

访问限定符
1.限定符 2.影响的是访问权限
两种情况 :
1)修饰顶级(Top-level)
2)修饰成员级(Member-level)
四种访问权限:
代表顶级访问权限
说法 | 定义语法 | 说明
public | public | 所有类都有访问权限
package-private | 空白 | 只有一个包的类有访问权限
protected | pritected | 留到继承在补充privatae
private | private | 只有本类有访问权限
a包的A类定义的属性|a包的A类方法中|a包的B类方法中|b包的C类方法中
public | 有 | 有 | 有
package-private | 有 | 有 | 无
private | 有 | 无 | 无
静态方法|静态属性
1)方法
普通方法(方法)|静态方法(类方法法
2)属性 普通属性(属性)|静态属性(类属性)
语法:
1.限定符 static
被static修饰的属性就是静态属性
被static修饰的方法就是静态方法
理解:
普通属性/普通方法都绑定着一个隐含的对(this)
static的含义就是和对象解绑
静态属性不再保存在对象(堆区)中,而是保存在类(方法区)中
静态方法调用时,没有隐含着的对象,所以也就无法使用this关键字

class Person{
    String name="小比特";
    String toString(){
        return this.name;
    }
    static Person createPerson(){
         return new Person();
    }
}

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

真的没有形参
访问静态属性/调用静态方法的语法:
内部:
属性名称;
类名称.属性名称;
this.属性名称;//保证当前方法不是静态方法
方法名称(实参列表);
类名称.方法名称(实参列表);
this.方法名称;//保证当前方法不是静态方法
外部:
类名称. 属性名称;
对象的引用.属性名称;
类名称. 方法名称(实参列表);
对象的引用.方法名称(实参列表);
强调:在静态方法(静态上下文)中,无法使用this关键字。因为没有一个隐式的对象与该方法绑定。
1)不能访问普通方法
2)不能调用普通方法
表现出来的特性:
一个类的所有对象,是可以共享静态属性的;(可以适当看作C语言的全局变量)
属性的初始化(发生在实例化的时候)1)和2)优先执行,按照定义顺序;3)最后执行
1)定义是初始化 int a=10;
2)构造代码块
{
a=10;
}
3)在构造方法中初始化
Person(){
a=10;
class A{
a=0;
int a=10;
a=20;
}
A(){
a=30;
}
}
静态属性初始化(发生在被加载的时候)
1)定义是初始化 1)和2)按照定义顺序执行
static int a=10;
2)静态构造代码块
static{
a=20;
}
类的信息一开始是以字节码(bytecode)*.class的形式保存在磁盘上的
类的加载过程就是类加载器(classLoader)在对象的目录上找到指定类的字节码文件,并进行解析,然后放到内存的方法区的过程
类只有被使用到的时候才会进行加载(一般不会卸载)
类的加载一定是发生在对象实例化之前
1)用类去实例化对象
2)调用静态方法
3)访问静态属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值