类和对象
相关概念
- 对象特征
-
封装
-
继承
-
多态
-
类
类:是一组相关属性和行为的集合
-
关系:类是事物的描述是抽象的,对象是事物的实例是具体的,类是对象的模板,对象是类的实体
类
定义
public class ClassName{
//成员变量
//成员方法
}
调用
- 一个类不能直接使用,需要创建一个对象才能使用
- 调用方法:
- 导包:import 包名称.类名称 //当调用的类和当前类在同一个包内则可以不写
- 创建:类名称 对象名 = new 类名称();
- 使用:对象名.变量名(方法名)
内存变化
- (一个对象调用一个方法)
- (两个对象调用同一个方法)
- new两个对象
- new一个对象,复制给令一个对象
类作为参数(传递地址值)
类最为返回值
局部变量&成员变量
-
区别:
- 定义位置不同:局部变量在方法内部,成员变量在方法外部直接写在类中
- 作用范围不同:局部变量只有在方法中才可以使用,成员变量在整个类全可以使用
- 默认值不同:局部变量没有默认值必须手动初始化,成员变量有默认值规则和数组一样
- 内存位置不同:局部变量在栈,成员变量在堆
- 生命周期不同:局部随方法进栈而存在,随方法出栈而消失;成员变量随对象创建儿存在,随对象回收而消失
-
注意点
public void method(int num){
System.out.printlin(num);
//方法的参数为局部变量,参数在被方法调用前必然会被赋值
//例:method(123)或method(nums),nums定义在方法外为成员变量
int age;
System.out.printlin(age);//错误,age为局部变量,未被赋值无法使用
}
封装
-
体现:
- 方法就是一种封装
- 关键字private也是一种封装
-
本质:将一些细节信息隐藏起来对外界不可见
-
private使用:
//例:当有人输入年龄时为负数时我们是无法处理的,所以引入私有成员利用接口函数进行处理
public class Phone {
String brand;
private int price;
public void init(Phone one){
one.brand="华为";
one.price=1200;
}
public void initPrice(int num){ //不必传类名
if (num>0&&num<100000){
price=num;//成员赋值
}else{
System.out.println("请输入正确的数");
}
}
public void getPrice(){
System.out.println(brand+"价格为"+price);
}
}
public class Dome02 {
public static void main(String[] args) {
Phone phone=new Phone();
//phone.price 错误
phone.init(phone);
phone.initPrice(20);
phone.getPrice();
}
}
this(用于解决局部变量和成员变量同名)
public class Person {
String name="wang";
public void call(String name){
//当 name=li时 li 和 li 打招呼
//System.out.println(name+"在和"+name+"打招呼");
System.out.println(this.name+"在和"+name+"打招呼");
//wang 和 li 打招呼
}
}
构造
- 构造方法:
public 类名称(参数类型 参数名称){
方法体
}
-
注意:
- 构造方法名和类名一致
- 构造方法无返回值且不写void
- 构造方法不能返回具体值
- 编译器默认赠送一个构造,若有其他构造,编译器不在赠送
- 可以有多个构造
-
有参构造和无参构造:
- 构造方法有参数为有参构造
- 构造方法无参数为无参构造
标准类
组成部分:
- 所有成员变量都要使用private关键修饰
- 为每个成员编写一对Getter/Setter方法
- 编写一个无参构造
- 编写一个有参构造
IDEA扩展
-
移动代码:shift+alt+上下键
-
自动生成Getter/Setter方法:code ->Generate->选择Getter/Setter->ok
量都要使用private关键修饰
2. 为每个成员编写一对Getter/Setter方法
3. 编写一个无参构造
4. 编写一个有参构造
IDEA扩展
-
移动代码:shift+alt+上下键
-
自动生成Getter/Setter方法:code ->Generate->选择Getter/Setter->ok