用一个对象可以管理多个属性
类与对象的区别
- 类是抽象的,概念的,比如人类,猫类,它是数据类型
- 对象是具体的,实际的,代表一个具体的事物,即实例
- 类是对象的模板,对象是一个个体,对应一个实例
访问修饰符
public
ptroctected
privite
jav内存的结构分析
栈:一般存放基本数据类型
堆:存放对象
方法区:常量池,类加载信息
java创建对象的流程分析
- 先加载persion类信息(只会加载一次)
- 在堆中分配空间,进行默认初始化
- 把地址赋给p,p就指向对象
- 指定初始化,比如p.name = "xiao ming"
成员方法
- 当程序执行到方法,就会开辟一个新空间
- 方法执行完毕,或者执行到return,就会返回
- 返回到调用方法的地方
- 返回后,执行方法后面的代码
成员方法的好处
- 提高代码的复用性
- 可以将细节封装起来,供其他用户使用
成员方法的定义
public 返回的数据类型 方法名(形参列表) {
语句
return 返回体
}
成员方法注意细节
- 返回可以任意数据类型
- 如果返回要求指定类型,则方法必须有return值,且必须返回指定类型或者兼容类型
- 如果方法是void,则可以没有指定类型
成员方法的传参机制
- 基本数据类型,传递的是值(值拷贝),形参的改变不影响实参
- 引用类型传递的的是地址(传递也是值,但是值是地址),可以通过形参改变实参
方法的重载OverLoad
java允许在同一个类当中,有多个同名方法的存在,但要求形参列表必须不一致。
比如System.out.printIn,out是PrintSteam类型
可变参数
java允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。使用可变参数的时候可以当做数组来使用。
注意点
- 可变参数可以和普通参数一起使用,但必须保证可变参数在最后
- 可变参数只能有一个
基本语法
访问修饰符 返回类型 方法名(数据类型... 形参名) {
}
public int sum(String str, int... sum) {
System.out.printIn(sum.length)
return sum.length
}
作用域
- 在java中,主要变量有属性(成员变量)和局部变量。
- 局部变量是指在成员方法中定义的变量或者代码块中的变量 。
- java作用域的分类:全局变量整个类都能用,局部变量只能在定义它的代码块中使用
- 全局变量可以不赋值,因为会有默认值,局部变量必须赋值。
- 属性和作用域的变量可以重名,访问时遵循就近原则。
- 属性可以加修饰符,局部变量不可以。
class Cat {
// 全局变量,可以在整个类中使用
int age = 10;
{
// 代码块中的变量
int age2 = 20;
System.out.println(age2);
}
public void cry() {
// 局部变量,只能在当前方法使用
String name = "kang";
System.out.println(name);
System.out.println(age);
// System.out.println(age2); // 报错
}
}
构造器constructor
特点
- 方法与类名相同
- 没有返回值,也不能写void
- 在创建对象的时候,系统自动调用该类的构造器完成对该对象的初始化
- 一个类可以定义多个构造器,即构造器重载。
- 构造器是完成对象的初始化,不是创建对象。
- 如果程序员没有定义构造器,系统会自动生成一个无参构造器。
class Cat {
int age;
// 构造器
public Cat(int page) {
System.out.println("构造器在对象初始化的时候就会被调用");
age = page;
}
}
对象创建的流程(经典基础面试题,背下)
- 先加载类信息(只会加载一次)
- 在堆中分配空间(地址)
- 完成对象初始化,分为三步
- 默认初始化(age = 0)
- 显示初始化(age = 10)
- 构造器初始化(age = page)
class Cat {
int age = 10;
// 构造器
public Cat(int page) {
System.out.println("构造器在对象初始化的时候就会被调用");
age = page;
}
}
Cat c = new Cat(15)
- 在对象在堆中的地址,返回给c(c是对象名),也可以理解为对象的引用。
this
java虚拟机会给每一个对象分配this,this代表当前对象。
this的本质:java虚拟机创建一个对象后,这个对象会有一个隐藏的属性this,this指向当前这个对象。
class Cat {
int age = 10;
public Cat(int age) {
this.age = age;
}
}
Cat c = new Cat(15)
this注意事项和细节
- this可以访问本类的属性,方法,构造器。
- 访问构造器的语法:直接
this(参数),这句必须要放在构造器内的第一句,且不能早构造器外使用。 - this用于区分当前类的属性和局部变量。
- this不能在类定义外使用。