类和对象
类(设计图):是对象共同特征的描述
对象:是真实存在的具体实例
在Java中,必须先设计类,才能获得对象
如何定义类
成员变量(代表属性,一般是名词)
成员方法(代表行为,一般是动词)
构造器
代码块
内部类
如何得到类的对象
类名 对象名 = new 类名();
如何使用对象
访问属性:对象名.成员变量
访问行为:对象名.方法名(...)
定义类的补充注意事项
用来描述一类事物的类,专业叫做Javabean类,在Javabean类中,是不写main方法的。
编写main方法的类,叫做测试类,我们可以在测试类中创建Javabean类的对象并进行赋值调用。
类名首字母建议大写、英文、有意义,需要见名知意,满足驼峰模式,不能用关键字,满足标识符规定
一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名,实际开发中建议还是一个文件定义一个class类。
成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值;
一般无需指定初始化值,存在默认值。
面向对象三大特征
封装、继承、多态
封装
告诉我们,如何正确设计对象的属性和方法
原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为
案例:人画圆、人关门,重心在对象
封装的好处
让编程变得简单,有什么事,找对象,调方法就行
降低学习成本,可以少学、少记,不用记对象有哪些方法,有需要时去找就行
private关键字
提高安全性
-
private是一个权限修饰符
-
可以用来修饰成员(成员变量和成员方法)
-
被private修饰的成员,只能在本类进行访问
被private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作。
提供"get变量名()"方法,用于获取成员变量的值,方法用public修饰。提供"set变量名(参数)"方法,用于设置成员变量的值,方法用public修饰
this关键字
this修饰的变量用于指代成员变量,其主要作用是区分局部变量和成员变量的重名问题
方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量
本质:代表所在方法调用者的地址值
public class Student { private String name; private int age; public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } public void show() { System.out.println(name + "," + age); } }
封装的实现
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
针对用private修饰的私有化的成员变量,提供对应的getXxx()/setXxx()方法。
get方法有返回值,set方法的作用是赋值,所以没有返回值
构造方法
构造方法也叫作构造器、构造函数
构造方法的格式
public class Student{ 修饰符 类名(参数){ 方法体; } }
特点:
-
方法名与类名相同,大小写也要一致
-
没有返回值类型,连void都没有
-
没有具体的返回值(不能由return带回结果数据)
执行时机:
-
创建对象的时候由虚拟机调用,不能手动调用构造方法
-
每创建一次对象,就会调用一次构造方法
如果我们自己没有写任何的构造方法,那么虚拟机给我们加一个空参构造方法
构造方法的作用
创建对象的时候,由虚拟机自动调用,给成员变量进行初始化的
构造方法有几种
无参数构造方法:初始化对象时,成员变量的数据均采用默认值
有参数的构造方法:在初始化对象的时候,同时可以为对象进行赋值
构造方法的注意事项
构造方法的定义
-
如果没有定义构造方法,系统将给出一个默认的无参数构造方法
-
如果定义了构造方法,系统将不再提供默认的构造方法,此时就需要自己写无参数构造器了
构造方法的重载
-
带参构造方法,和无参数构造方法,两者方法名相同,但是参数不同,这叫做构造方法的重载
推荐的使用方式
-
无论是否使用,都手工书写无参数构造方法,和带全部参数的构造方法
重要功能
-
可以使用带参构造,为成员变量进行初始化
示例代码
/* 学生类 */ class Student { private String name; private int age; public Student() {} public Student(String name) { this.name = name; } public Student(int age) { this.age = age; } public Student(String name,int age) { this.name = name; this.age = age; } public void show() { System.out.println(name + "," + age); } }
标准JavaBean
① 类名需要见名知意
② 成员变量使用private修饰
③ 提供至少两个构造方法
-
无参构造方法
-
带全部参数的构造方法
④ get和set方法
提供每一个成员变量对应的setXxx()/getXxx()
如果还有其他行为,也需要写上
快捷键:alt + insert/alt + Fn +insert
插件:ptg
内存角度理解:
第一次创建对象的时候,加载了class文件,后面再创建对象,就不需要再加载了
每次new一个新对象,堆内存就会开辟的空间,空间之间相互独立,互不影响
当两个变量指向同一个空间的时候,只要有其中一个变量对这个空间的值发生了改变,那么其他的变量再次访问的时候,就是改变之后的结果了