类和对象
类的定义
类的定义:类是现实生活中一类具有共同属性和行为的事物的抽象。
类的特点:
1.类是对象的数据类型
2.类是具有相同属性和行为的一组对象的集合。
类的定义步骤
1.定义类
2.编写类的成员变量
3.编写类的成员方法
public class 类名{
//成员变量
变量1的数据类型 变量1;
变量2的数据类型 变量2;
…
//成员方法
方法1;
方法2;
…
}
demo:
package JavaStudyDay10;
public class Phone {
//定义成员变量
String brand;
int price;
//定义成员方法
public void call() {
System.out.println("call");
}
public void messaeg() {
System.out.println("sendMessage");
}
}
对象的使用
1.创建对象 格式:类名 对象名 = new 类名(); 例: Phone p = new Phone();
2.使用对象
使用成员变量:
格式:对象名.变量名 例:p.brand
使用成员方法:
格式:对象名.方法名 例:p.call
package JavaStudyDay10;
public class PhoneTest {
public static void main(String[] args) {
//创建对象
Phone p = new Phone();
//使用成员变量
System.out.println(p.brand); //null
System.out.println(p.price); //0
p.brand = "HUAWEI";
p.price = 3000;
System.out.println(p.brand); //HUAWEI
System.out.println(p.price); //3000
p.call(); //打电话
p.messaeg(); //发短信
}
}
类和对象的关系
类是对显示生活中一类具有共同属性的行为事物的抽象。
对象是能够看得到摸得着的实体。
类是对象的抽象,对象是类的实体。
对象内存图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bw4pSM7y-1606572736073)(D:\JAVA学习截图\多个对象指向相同的内存.jpg)]
当多个对象指向同一个堆内存空间时,任意一个对象使用成员变量改变时,另一个也会随之改变。
成员变量和局部变量
成员变量:类中方法外的变量
局部变量:类中方法中的变量
package JavaStudyDay10;
public class Phone {
//定义成员变量
String brand;
int price;
//定义成员方法
public void call() {
int i; //局部变量
System.out.println("call");
}
public void messaeg() {
int j; //局部变量
System.out.println("sendMessage");
}
}
成员变量和局部变量的区别
1.类中的位置不同。成员变量在类中方法外,局部变量在类中方法外。
2.内存中的位置不同。成员变量在堆内存,局部变量在栈内存。
3.生命周期不同。成员变量随着对象的存在而存在,随着对象的消失而消失。局部变量随着方法调用而存在,随着方法调用结束而消失。
4.初始值不同。成员变量在堆内存有初始值,局部变量在栈内存无初始值,必须先定义赋值才能使用。
封装
private 关键字
1.是一个权限修饰符
2.可以修饰成员(成员变量和成员方法)
3.作用是保护成员不被别的类使用,被private修饰的成员只能在本类中才能访问。
若其他类需要使用,则提供相应操作。
get 变量名() 方法,用于获取成员变量的值,方法用public修饰
set 变量名(参数), 用于设置成员变量的值,方法用public修饰。
demo:
package JavaStudyDay10;
import com.sun.org.apache.bcel.internal.generic.RETURN;
public class Student {
//定义成员变量
int height;
int weight;
String hobby;
private int age;
public void setAge(int a){
if(a<0 || a>120) //判断年龄大小是否符合规则
System.out.println("你给的年龄有误");
}else {
age = a;
}
}
public int getAge() {
return age;
}
//定义成员方法
public void study() {
System.out.println("学习!");
}
public void hobby() {
System.out.println("打篮球篮球篮球!");
}
public void eat() {
System.out.println("干饭");
}
}
//若测试类需要使用成员变量,则直接调用相应get()、set()方法。
this关键字
this修饰的变量用于指代成员变量。
public void setAge(int age){
this.age = age;
}
如果形参与成员变量名字相同,带有this的变量指代的是成员变量,没带this的变量是方法的形参。
什么时候使用this呢?
在局部变量的名字与成员变量的名字相同时,为了解决局部变量隐藏成员变量的时候使用this关键字。
方法被哪个对象调用,this就代表哪个对象。
封装
封装是面向对象的三大特征之一。(封装、继承、多态)
封装原则
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏信息的操作和访问。
例如成员变量private,提供对应的set(变量)、get()方法。
封装的好处
通过方法来控制对成员变量的操作,提高了代码的安全性。
把代码通过方法来进行封装,提高了代码的复用性。
构造方法
作用:创建对象
格式
public class 类名{
修饰符 类名 参数(){ //修饰符一般用public
}
}
例如:
public class Student{
public Student(){
}
}
构造方法的注意事项
1.构造方法的创建
如果没有定义构造方法,系统将给出一个默认的无参构造方法
如果定义了构造方法,系统将不再提供默认的构造方法
2.构造方法的重载
如果自定义了带参构造方法,还要使用无参构造方法,就必须再写一个无参构造方法
3.推荐使用方式
无论是否视同,都手工书写无参构造方法
标准类的制作要求
1.成员变量
使用private修饰
2.构造方法
提供一个无参构造方法
提供带多个参数的构造方法
3.成员方法
提供每一个成员变量对应的set和get方法
提供一个显示对象信息的show();
4.创建对象并给成员对象赋值,两种方式。
第一种方法:使用无参构造方法创建对象后使用set方法赋值
第二种方法:使用带参构造方法直接创建带有属性值的对象
Demo:
package JavaStudyDay10;
public class Parent {
//定义成员变量
private String name;
private int age;
//定义set()、get()方法
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
if (age < 0) {
System.out.println("年龄输入有误奥:(");
} else {
this.age = age;
}
}
public int getAge() {
return age;
}
//定义构造方法
public Parent(String name, int age) {
this.name = name;
this.age = age;
}
//定义空构造方法
public Parent() {
}
public void show() {
System.out.println(name + "," + age);
}
}
package JavaStudyDay10;
public class ParentTest {
public static void main(String[] args) {
//定义对象
Parent p1 = new Parent();
//使用get方法赋值
p1.setName("李YM");
p1.setAge(46);
p1.show();
System.out.println(p1.getName()+"- - -"+p1.getAge());
//使用构造方法赋值
Parent p2 = new Parent("李TL",50);
p2.show();
}
}