类和对象-JAVA

类和对象的定义方式

认识类之前我们需要知道一些知识,这样就不会让我们只知道学习而不懂用的情况了

  1. 什么是面向对象?
  2. 什么是面向过程?
  3. 什么是类?如何定义一个类
  4. 有了类之后,如何实例化一个对象?
  5. 有了对象之后,如何初始化对象,如何访问对象中的成员?

解答:

  1. 面向对象就是遇到问题时,所面对的对象。
  2. 面向过程就是解决问题的过程,对象之间相互交互完成的一件事情
  3. 类就是用来描述对象的,主要描述该对象具有哪些属性,哪些功能……

类的定义格式:

//创建类
class TeatDate{
成员变量(static静态和非静态)
成员方法(静态和非静态)
}

  • 类名注意采用大驼峰定义

对象的实例化

什么是实例化?
比如狗(类)是所有狗名字的统称,当我们确定了某种狗(柯基–对象)的品种,就是实例化了对象。

  • 有类类型创建对象的过程,称为类的实例化。
  • 其中非静态成员变量保存在对象中或者堆中,成员方法保存在方法区中
  • 通过一个类类型可以new出多个对象
  • 使用 . 来访问对象中的属性和方法

在这里插入图片描述

成员变量和成员方法变量

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

  • 成员变量是在类里面,方法外面
  • 局部变量只能在方法里面
  • 成员变量不初始化不会发生错误,但是局部变量不初始化,会发生编译错误
    在这里插入图片描述

this的作用

this其中一个作用是区分局部变量和成员变量
当成员变量名和局部变量名相同时,局部变量名优先,这就会导致被赋值的变量任然表示的还是局部变量
在这里插入图片描述
在这里插入图片描述利用this之后:
this指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问的。

在这里插入图片描述
在这里插入图片描述
只不过所有的操作堆用户是透明的,即用户不需要来传递,编译器自动完成。
添加了也不会报错!

在这里插入图片描述

== 总结this的特性==

  1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
  2. this只能在“成员方法”(包括构造方法)中使用
  3. 在“成员方法”中,this只能引用当前对象,不能再引用其他对象,具有final属性
  4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收。
    == 大致this的作用==
    1.this.date:调用该对象的成员变量
    2.this.fun():调用该对象的成员方法
  5. this():调用构造方法

对象的初始化

就地初始化

直接对成员变量方法赋值。
在这里插入图片描述

默认初始化

对象空间被申请对象,对象中包括的成员已经设置好了初始化
在这里插入图片描述

构造方法初始化

  1. 简单介绍构造方法作用:对对象中的成员进行初始化,并不负责给对象开辟空间,
  2. 地位:构造方法的完成,标志着成功实例化对象
  3. 构造方法如何写,有没有快捷键

名字必须与类名相同
没有返回类型,设置void也不行
创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次
构造方法可以重载
如果用户没有自己定义构造方法,编译器会生成一份默认的构造方法,生成默认构造方法一定是无参的
一旦用户定义了,编译器便不会再生成构造方法
构造方法中,可以通过this调用其他构造方法来简化代码,切记不能形成环且this调用其他构造方法时,必须是第一条语句
利用快捷键右键->Generate->constructor->选择需要初始化的变量

以下是利用快捷键生成的构造方法:
在这里插入图片描述
在这里插入图片描述

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

  1. 如何调用:当创建new就调用构造方法
    Student stu1=new Student();这个括号就是调用构造方法
    在这里插入图片描述

  2. 还有this如何调用构造初始化,利用this构造方法的注意事项
    在这里插入图片描述注意事项:不能形成环且必须放在第一句

封装

面对对象程序三大特性:封装、继承、多态
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。

访问限定符

java中主要通过类和访问权限来实现封装
在这里插入图片描述public权限:无论在哪里都可以访问
default权限指:对于自己家族中(同一个包中)不是什么密码,对于别人来说就是隐私,什么都不写的默认权限

private权限指:只有自己知道,其他人不知道,可以利用方法来
在这里插入图片描述 利用快捷键右键->Generate->Getting and Setting->选择需要初始化的变量
在这里插入图片描述

包就相当于文件夹,类就相当于文件,但最好一个文件中只有一个类,但只能有一个public类

static成员

所有静态成员都通过类名来访问

static修饰成员变量

在这里插入图片描述

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

静态成员变量的特性

  1. 不属于某个具体的对象,是类的属性,是所有对象共享的,不存储在某个对象的空间中
  2. 既可以通过类名访问,也可以通过对象访问,但最好使用前者
  3. 静态的类变量存放在方法区中,不能存在对象中
  4. 生命周期伴随类的一生

static修饰成员方法

在这里插入图片描述

静态成员方法方法的特性

  1. 不属于某个对象,是该类专属的特性
  2. 最好利用类名访问
  3. 静态方法中只能访问静态变量或者静态方法,不能访问其他非静态的成员;但非静态方法可访问静态成员
    非静态能访问静态;静态不能访问非静态
  4. 静态方法没有隐藏的this引用参数
  5. 静态方法无法重写,不能用来实现多态

static成员变量初始化

就地初始化和静态代码块初始化
其中就地初始化就是直接定义时,直接设置变量
静态初始块下面

代码块

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

在这里插入图片描述
优先级:静态代码块>实例代码块>构造方法

普通代码块

定义在方法中的代码块
{//直接使用{}定义

}

构造代码块(实例代码块)

定义在类中,方法外面的代码块(不加修饰符)。构造代码块一般用于初始化实例成员变量。

  • 实例代码块只有在创建对象时才会执行

静态代码块

使用static定义的代码块称为静态代码块,一般用于初始化静态成员变量

  • 静态代码块不管生成多少个对象,其只会执行一次

内部类

内部类的由来:当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好的使用内部类。
**在java中,可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类。**内部类也是一种封装的体现。

实例内部类

1、实例内部类(依赖对象)当中不能定义静态(不依赖成员)的成员变量或者方法,可以这样理解,内部类也相当于外部类的成员类类型;
若如果一定要定义成员变量一定要加上final–>字面常量(相当于#define),就变成了固定值,不能改变

public static final int e=100;

2、如何获取实例内部类的对象
思路:先将外部类对象先创建出来,然后再创建内部类对象
第二种方法更好一些
其中Test是外部类名称,InnerTest是内部类名称

// 第一种方法:
Test.InnerTest date1=new Test().new InnerTest();
//第二种方法:
Test sc=new Test();
Test.InnerTest date2=sc.new InnerTest();

3、重名:当外部类和内部类中具有相同名称成员时,优先访问的是内部类自己。
内—>外访问: 若想再内部类中访问外部类的成员的时候,
必须:外部类的类名.this.同名成员变量

//内部类中
public void print(){
//如果要访问外部类同名成员的时候,必须:外部类名称.this.同名成员名字
System.out.println(“外部类的成员变量”+Test.this.a);
//如果外部类和内部类中具有相同名称成员时,优先访问的是内部类自己
System.out.println(“内部类的成员变量”+a);
System.out.println(b);
System.out.println©;
System.out.println(d);
System.out.println(f);
System.out.println(g);

在这里插入图片描述
外—>内访问:外部类中访问内部类的成员,需创建内部类的对象

public class Test {

InnerTest date3=new InnerTest();

public void methodA() {

    System.out.println(date3.f);
}

注意事项

  1. 外部类中的任何成员都可以被实例内部类方法中直接访问,其中也包括静态成员。
  2. 普通内部类所处的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束。
  3. 普通内部类对象必须在先有外部类对象前提下才能创建
  4. 外部类中,不能直接访问内部类中的成员,如果要访问必须先要创建内部类的对象
  5. 内部类中,要想访问外部类中同名成员变量,必须:外部类类名.this.同名成员变量;若访问非同名成员变量,就直接输入变量名即可。

静态内部类

1、静态内部类中可以定义任何成员。
2、在静态内部类中,只能访问外部类的静态成员
内–>外:若想在静态内部类中,访问外部类的非静态成员,需要在静态内部类中实例化外部列对象
在这里插入图片描述外–>内:若想在外部类中访问内部类中的成员变量,就要在外部类中实例化
在这里插入图片描述3、如何获取静态内部类的对象
创建内部类对象时,不需要创建外部类对象,直接创建内部类对象

Test.InnerClass date=new Test.InnerClass();

其中Test.InnerClass()中是一体的
4、成员内部类,经过编译之后会生成独立的字节码文件,命名格式为:外部类名称$内部类名称
在这里插入图片描述

总结
上述就是总结,可以发现静态内部类的语法比实例化内部类少的多,因此,静态内部类使用的次数频率比较高

局部内部类

定义在外部类的方法体或者{}中,该种内部类只能在其定义的位置使用,一般使用的非常少。不加任何修饰符。

public class Test {
    int a=10;
    public void method(){
        int b=10;
        //局部内部类:定义在方法体内部
        //不能被public、static等访问限定符修饰
        class InnerClass{
            public void  methodInnerClass(){
                System.out.println(a);
                System.out.println(b);
            }
        }
        //只能在该方法体内部使用,其他位置都不能使用
        InnerClass innerClass=new InnerClass();
    }

    public static void main(String[] args) {
        Test.InnerClass innerClass=null;
    }
}

== 总结==

  1. 局部内部类只能在所定义的方法体内部使用
  2. 不能被public、static等修饰符修饰
  3. 几乎不使用

匿名内部类

只能用一次,每次使用都要创建对象

== 总结==

对象的打印

右键–>Generate–>toString
在这里插入图片描述在这里插入图片描述简单介绍原理:
printly的函数:
在这里插入图片描述value0f函数:
在这里插入图片描述
toString函数:

在这里插入图片描述
在这里插入图片描述
原理:若类中未产生toString,则编译器默认为对象地址;若类中有toString,则将打印自己对象的信息。
,直接System.out.println(类名),系统就调用写的toString,并接收返回值;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值