类与对象
类和对象的联系
- 类是抽象的,是由程序员对一种事物进行抽象而构造的一种数据类型
- 对象是具体的,它是类的一个实例化
- 类是对象的模板,对象是类中的一个个体
类和对象的内存分配机制
###Java的内存结构
* 栈:栈空间用来存放基本数据类型
* 堆:对空间用来存放引用类型(对象、数组)
* 方法区:常量池和类加载信息
###内存分配过程
1. 加载类信息(属性和方法)
2. 在堆中分配空间
3. 对象初始化(默认初始化,显示初始化或者通过构造器初始化)
4. 将地址赋给对象变量p,通过p可以访问这个对象
静态域和静态方法
静态域
可以将域定义为 static,每一个类中只有一个这样的域。即使没有对象,这个静态域也存在。它属于类而不属于任何独立的对象,可以直接通过类来访问这个域。
class Employee{
private static int nextId = 1; //静态域
private int id;
public Employee(String n, double s) {
name = n;
salary = s;
id = 0;
}
public void setId() {
id = nextId; //通过静态域来设置id
nextId++;
}
}
静态常量
class Hour {
private static int HOURS = 24;
public static void main(String[] args) {
System.out.println(Hour.HOURS);
}
}
静态方法
静态方法时一种不能向对象实施操作的方法,静态方法没有this参数,静态方法可以访问自身类中的静态域。当一个方法是以下两种情况是应该为设置为静态方法.
1.不需要访问对象状态,参数是显示提供的
2.只需要访问类的静态域
//只访问静态域,接employee
public static int getNextId() {
return nextId; //return static field
}
main方法
main方法不对任何对象进行操作,所以main方法是静态方法,一个类只能有一个main方法。通常在类中的main方法是作测试用的,只有与文件名相同的类的main方法才是整个程序的入口
成员方法传参机制
形参是实参的一个拷贝,当执行调用后的方法结束后,形参被销毁。
- 当方法参数是基本数据类型时,形参和实参是传值调用,调用方法结束后,形参被销毁,形参的改变不影响实参。即一个方法不能修改一个基本数据类型的参数
- 当方法参数是引用类型时,形参和实参时引用调用,修改形参的状态会影响实参,即一个方法可以改变一个对象参数的状态
- 当有两个参数都是对象时,交换两个对象的引用,实参不会被修改。即一个方法不能让对象参数引用另外一个新的对象
方法重载
java中允许同一个类中,有多个同名方法的存在,但要求形参列表不一致。通过方法重载我们可以设计一系列作用相似的方法,使它面对不同的输入可以做不同的处理。
重载要求
- 方法名必须相同
- 形参的参数类型,个数或者顺序必须有一个不同
- 返回类型没有要求
可变参数
java允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。就可以通过可变参数实现。
语法
访问修饰符 返回类型 方法名(数据类型.. 形参名){ … }
//使用可变参数时,num可以当作数组
public int sum(int... nums){
System.out.println("接收的参数个数="+nums.length;
intres=0;
for(inti=0;i<nums.length;i++){
res+=nums[i];
}
return res;
}
细节
- 可变参数可以是数组,而可变参数本质上就是数组
- 可变参数必须放在参数列表的最后
- 一个形参列表只用有一个可变参数
构造器
在java中使用构造器构造实例,用构造器与new操作符来构造并初始化对象
- 构造器与类同名
- 构造可以有0,1,2个或多个参数
- 构造器没有返回值
- 构造器和new指针操作符一起出现
构造器的使用
- 构造器重载:一个类可以定义多个构造器,当构建对象时,可以只指定一个或多个值来初始化
- 当没有定义构造器时,系统会默认的提供一个无参构造器,对对象进行默认初始化,当定义了自己的构造器时,将不会再提供无参构造器,除非显示的进行声明
this关键字
在java中,java虚拟机给每一个对象分配this用来代表当前对象。this关键字很好的解决了类内部属性和成员方法参数重名的问题。
Public Person(String name, int age){
this.name = name
this.age = age
}
- 用 this 可以访问类的属性,方法
- 用 this 可以访问构造器(必须在构造器中使用,且必须为第一句) ,这样可以很方便的对构造器进行重载
原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/276263.html