Java类与对象
一、类
1、概念
类:是数据和对数据进行处理的方法的集合体
对象:类的实例,任何事物都可以是对象
2、定义
基本格式:[类修饰符] class <名称> { 变量定义和方法定义 }
类的成员变量:[ 修饰符]<类型><变量名>=[值] ;public int a=3;
类的成员方法:[修饰符]<返回类型><方法名>(形式参数){方法} ; public int area(int a,int b){return a*b;}
3、方法
参数传递:方法中所有类型的参数传递都是“值传递”
递归:自身调用自身或间接调用自身
方法重载:方法名字相同但参数不同,方法的参数个数,参数类型,参数排列顺序不同,都会构成重载(返回值类型要相同);int a(int x)、int a(int x,int y)、int a(int x,double y)
调用重载方法:若只有f(short),f(float),当用f(byte)时,因byte可宽转换为short,而short可变float,float不可以宽转换为short,所以调用的是f(short)。当调用f(null),因空引用可自动转换为int【】,也可自动转换为Object,但int【】是Object类型,而Object不一定是int【】。
二、创建对象
1、构造方法
语法规则:方法名与类名相同,不要有返回类型,不能被static、final、synchronized、abstract、native修饰
过程:在创建一个类的对象时,首先用new分配空间,然后自动调用某个构造方法,对该对象进行初始化,给实例变量一个合适的初值。
注意:不管变量定义位于方法之后还是之前,在方法被调用前就得到了初始化
2、默认构造方法
Java规定,每个类都必须至少定义一个构造方法,如果没有定义构造方法,编译程序会自动生成一个默认构造方法。建议 每个类都有一个默认构造方法即无参数的构造方法
三、this引用
this:表示对象自身的引用值。当不在混淆的情况下,this.可以省略;在static方法中是不能使用this的
格式:this(参数列表);若想在有多个构造方法的类中的一个构造方法中调用另一个构造方法,可用this,而且这条语句必须在构造方法中处于第一条语句。
四、静态成员
1、静态变量
静态变量:被static修饰,可通过类名来访问静态变量
实例变量:没有被static修饰,实例变量可以在内存中有多个备份
2、静态方法
引用:通过类名 或 通过实例对象来引用
注意:在静态方法中可以直接访问类中其他静态的成员,不能直接访问类中的非静态成员;静态方法中不能以任何方式引用this、super;子类只能继承、重载、隐藏父类静态成员,不能重写父类的静态方法,或修改父类的非静态成员为静态成员
3、main()
注意:必须是public static void(String [ ]args)
4、静态代码块
注意:每个静态代码块只会被执行一次,顺序是:按照static成员变量和static代码块在类中定义的先后顺序来依次执行,之后调用main函数。
五、内部类
定义:在一个类内部定义的类。相应的有内部类的类叫外部类,外部类只能处于public或默认访问级别
1、实例内部类
注意:创建实例内部类对象时,外部类的实例必须已经存在;在实例内部类中,实例内部类的实例可通过“外部类名字.this“;在外部类中不能直接访问内部类的变量或方法,必须通过内部类的实例去访问;外部类实例与内部类实例是一对多的关系;内部类中不能有静态成员;如果内部类与外部类中有重名的变量,则this.表示的是内部的,外部类名.this.表示的是外部类的;在内部类中访问外部类成员,都需要用外部类名.this变量。
2、匿名内部类(没有类名)
注意:匿名内部类必须继承一个父类或接一个接口,但最多实现一个接口;匿名内部类无法定义构造方法,只有自动生成的默认构造方法;可在它里面定义实例变量,实例初始化代码块和新的实例方法,首先调用父类的构造方法;被匿名内部类访问的局部变量要被final修饰,Java会自动修饰。
格式:在new<外部类类名>{匿名内部类类体};这个匿名内部类就是继承外部类。
3、static内部类
定义:在定义内部类时,加static修饰
static内部类的作用:进行访问权限的控制;能访问外部类中的static型成员,对于非static型成员,先创建外部类的实例对象,通过对象间接访问
4、局部内部类
定义:在一个方法体、构造器或初始化块中定义一个类
注意:它们不能被定义为static;它们可以访问外部类的成员,但是对于方法中的形参或局部变量,只有被final修饰,才可以访问。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)