类与对象
1.1.类与对象
- 类:数据类型; 一组事物相同的属性和行为(功能)的抽象;
- 类是一个模板
1.1.1.类的定义
-
类中包含2大成员:成员变量(或者说属性)和方法
-
如何定义成员变量
- 权限修饰符(4个) 任意数据类型 属性名(首字母小写);
- 成员变量都有默认值:是其数据类型的零值
-
方法,和之前定义方式相同
package com.package1;
public class Class01 {
//属性
String name;
String timed;
int num;
//方法
public void learning(){
System.out.println("正在学习");
}
public void outlearing(){
System.out.println("学习结束");
}
}
1.1.2.对象的操作
- 创建对象使用关键字 new
- 只要碰到new 都会在堆空间新开辟空间;创建出来的对象都在堆;
- 创建对象后,可以操作对象的成员变量和方法,使用实心点 . 运算符进行操作
package com.package1;
public class Class01Text {
public static void main(String[] args){
//创建对象 new:都会在堆空间新开辟空间;创建出来的对象都在堆;
Class01 stu1 = new Class01();
//访问成员变量
stu1.name = "Python";
System.out.println(stu1.name);
//方法的调用
stu1.learning();
}
}
练习题
学生类型:
/**
* 模板:相同的属性和行为
*/
public class SMStudent {
public String name;
public int id;
public char gender;
public Computer com; //null 注意
public void eat() {
System.out.println("正在吃饭");
}
public void study() {
System.out.println("使用" + com.brand + "在学习");
}
}
电脑类型
public class Computer {
public String brand;
public double price;
public void online() {
System.out.println("上网");
}
}
测试代码
private static void method3() {
SMStudent tom = new SMStudent();
tom.name = "tom";
tom.gender = 'f';
// 创建一个真正的电脑对象
Computer computer1 = new Computer();
computer1.brand = "戴尔";
computer1.price = 66.6;
tom.com = computer1; //注意
System.out.println(tom.com.brand);//
System.out.println(tom.com.price);
//
SMStudent jerry = new SMStudent();
Computer computer2 = new Computer();
computer2.brand = "华硕";
computer2.price = 99.9;
jerry.com = computer2;
System.out.println("=============");
System.out.println(jerry.com.brand);
System.out.println(jerry.com.price);
tom.study();
jerry.study();
}
1.1.3.构造方法
-
构造方法(构造器):为了给对象的成员变量赋程序员给的初始值
- 没有返回值
- 方法名和类名相同
-
何时调用:new创建对象的时候 调用构造方法
-
注意点:
- 当类中没有任何构造器的时候,编译器添加一个无参构造(默认添加)
- 一旦显示写了构造器之后,不会再默认添加无参构造;
- 保持习惯:定义类时,无参构造都要添加
/**
* 构造方法(构造器):为了给对象的成员变量赋程序员给的初始值
* 1 没有返回值
* 2 方法名和类名相同
*/
public Computer(String brand, double price) {
//this()必须出现在首行
this(brand);
this.price = price;
}
public Computer(String brand) {
this.brand = brand;
}
public Computer() {
System.out.println("无参构造执行了");
}
1.1.4.成员变量和局部变量区别
- 声明位置不同。成员变量声明在类体;局部变量声明在方法体;
- 作用域不同。成员变量的作用域是整个类体;局部变量的作用域在方法体
- 使用不同。局部变量使用之前一定要赋值;成员变量可以直接使用,JVM给了默认值;
- 存储位置不同。成员变量的值存在堆空间;局部变量的值存储在栈空间;
- 成员变量和局部变量重名的时候,优先访问局部变量,可以使用this访问成员变量;