07_Java面向对象基础
Java面向对象基础
一、类和对象
1、什么是对象:
万物皆对象,客观存在的事物皆可为对象
2、面向对象:
关注事物的信息,对事物的属性和行为有一定了解
3、什么是类:
对生活中一类具有共同属性和行为的事物的抽象
类的特点:
类是对象的数据类型
类是具有相同属性和行为的一组对象的集合
4、什么是对象的属性:
对象具有的各种特征,每个对象的每个属性都拥有特定的值
5、什么是对象的行为:
对象能够执行的操作
6、类和对象的关系:
类:是对显示生活中一类具有共同属性和行为的事物的抽象
对象:是能够看得到摸的着的真实存在的实体
创建对象相当于,将类实体化。从一些对象中获取共同特征构建一个类,是将对象抽象化。
7、类的定义:
1、类是Java中基本的组成单位
2、类的组成:属性和行为
属性:在类中通过成员变量来体现(类中方法外的变量)
行为:在类中通过成员方法来体现(和前面的方法相比去掉的static关键字即可)
3、定义步骤:
定义类、编写成员变量、编写类的成员方法
package com.itheima; /* 创建一个手机类 */ public class Phone { //成员变量 String brand; int price; //成员方法 public void call(){ System.out.println("打电话"); } public void sendMessage(){ System.out.println("发短信"); } }
8、对象的使用:
1、创建对象:
格式:类名 对象名 = new 类型();
2、使用对象
格式:对象名.变量名 对像名.方法名();
package com.itheima;//在一个包中,此类定义在上一个java class中 public class PhoneDemo { public static void main(String[] args){ //创建对象 Phone p = new Phone(); //new出来的对象在堆内存中有初始值 //使用成员变量 System.out.println(p.brand); System.out.println(p.price); //给类对象赋值 p.brand = "小米"; p.price = 2999; System.out.println(p.brand); System.out.println(p.price); p.call(); p.sendMessage(); } }
9、类和对象的案例学生:
package com.itheima02; /* 学生测试类 */ public class StudentDemo { public static void main(String[] args) { //创建对象 Student s = new Student(); //使用对象 System.out.println(s.name + "," + s.age); //属性赋值 s.name = "张三"; s.age = 30; System.out.println(s.name + "," + s.age); s.study(); s.doHomework(); } }
二、对象的内存图
属性在堆内存,行为在栈内存(与前面的内存分区类似)
1、单个对象:
略 属性分配到堆区,行为分配到栈区
package com.itheima03; /* 创建对象 */ public class StudentDemo01 { public static void main(String[] args) { //创建对象 Student s = new Student(); System.out.println(s); //使用对象 System.out.println(s.name + "," + s.age); //属性赋值 s.name = "张三"; s.age = 30; System.out.println(s.name + "," + s.age); //使用成员方法 s.study(); s.doHomework(); } }
2、多个对象:
略 每个对象属性分别分配首地址在堆区,行为共用
package com.itheima03; /* 创建多个对象 */ public class StudentDemo02 { public static void main(String[] args) { //创建第一个对象 Student s1 = new Student(); s1.name = "张三"; s1.age = 20; System.out.println(s1.name + "," + s1.age); s1.study(); s1.doHomework(); //创建第二个对象 Student s2 = new Student(); s1.name = "李四"; s1.age = 28; System.out.println(s1.name + "," + s1.age); s2.study(); s2.doHomework(); } }
3、多个对象向相同:
略 由于是分配到地址值,一个修改所有都会被修改
package com.itheima03; /* 多个对象指向相同 */ public class StudentDemo03 { public static void main(String[] args) { //创建第一个对象 Student s1 = new Student(); s1.name = "张三"; s1.age = 20; System.out.println(s1.name + "," + s1.age); //把第一个对象的地址值赋值给第二个对象 Student s2 = s1; s1.name = "李四"; s1.age = 28; System.out.println(s1.name + "," + s1.age); System.out.println(s1.name + "," + s2.age); } }
三、成员变量和局部变量
1、什么是成员变量和局部变量:
成员变量:类中方法外的变量
局部变量:方法中的变量(语句块中执行后就会被自动销毁的变量)
2、成员变量和局部变量的区别:
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置不同 | 类中方法外 | 方法内或者方法声明上 |
内存位置不同 | 堆内存 | 栈内存 |
生命周期不同 | 随着对象的存在而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的调用完毕而消失 |
初始化值不同 | 有默认的初始化值 | 没有默认值的初始化,必须先定义,赋值,才能使用 |
四、封装
1、private关键字:
1、是一个权限修饰符
可以修饰(成员变量和成员方法)
作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问。
2、针对private修饰的成员变量,如果需要被其它类使用,提供相应的操作
提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰
提供"set变量名(参数)"方法,用于设置成员变量的值,方法中用public修饰
3、参考代码:
//Student类 同属于包com.itheima05 package com.itheima05; /* 学生类 */ public class Student { //成员变量 private String name; private int age; //get/set方法 public void setName(String n){ this.name = n; } public String getName(){ return this.name; } public void setAge(int a){ if(a < 0 || a > 120){ System.out.println("你输入的年龄不符合要求"); } else{ this.age = a; } } public int getAge(){ return this.age; } public void show(){ System.out.println(this.name + "," + this.age); } }
//StudentDemo测试类 package com.itheima05; /* 学生测试类 */ public class StudentDemo { public static void main(String[] args){ //创建对象 Student s = new Student(); //调用set方法给成员变量赋值 s.setName("张三"); s.setAge(30); //s.show(); //给出一个固定的格式 //使用get方法获取成员变量的值 得到一个自己想要的格式 System.out.println(s.getName() + "----" + s.getAge()); } }
2、this关键字:
1、this修饰的变量用于指代成员变量:
方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量
2、什么时候使用this呢?
解决局部变量与成员变量同名时,将成员变量隐藏的问题
3、this:代表所在类的对象引用
记住:方法被哪个对象调用,this就代表那个对象
4、this的内存原理:
this获取当前调用类方法的对象,即获取对象所拥有的地址值
3、封装:
1、封装的概述:
是面向对象的三大特征之一(封装、继承、多态)
是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部,外界是无法直接操作的
2、封装原则:
将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
成员变量是private,提供对应的getXxx()/setXxx()方法
3、封装的好处:
通过方法来控制成员变量的操作,提高了代码的安全性,把代码用方法进行封装,提高了代码的复用性
五、构造方法
1、构造方法的定义:
1、构造方法的概述:构造方法是一种特殊的方法其作用就是用来创建对象的
2、构造方法的格式:
public class 类名{ 修饰符 类名(参数){ //构造方法的方法体 } }
3、构造方法的功能:主要是完成对象数据的初始化
2、构造方法的注意事项:
1、构造方法的重建:
未提供构造方法时,系统会自动给出一个无参无实现的构造方法
如果定义了有参构造方法系统将不会提供默认的构造方法,还需使用时自行手动提供
2、构造方法的重载:
根据方法重载的定义来看,可根据参数个数,顺序,类型来重载构造方法(对于构造方法而言后两种无意义)
3、推荐使用方式:
无论是否使用,都手动书写无参构造方法
3、标准类的制作:
1、成员变量:
使用private修饰
2、构造方法:
提供一个无参构造方法
提供一个带多个参数的构造方法
3、成员方法:
提供每一个成员变量对象的setXxx() / getXxx()
提供一个显示对象信息的show()
4、创建对象并为其成员变量赋值的两种方式:
无参构造方法创建对象后使用setXxx()赋值
使用带参构造方法直接创建带有属性值的对象
5、参考代码:
//标准Student类 package com.itheima09; /* 标准类的制作 */ public class Student { //成员变量 (分配在堆区:为赋值时以堆区各个类型初始值为准) private String name; private int age; //无参构造 public Student(){}; //有参构造 public Student(String name, int age){ this.name = name; this.age = age; } //定义set/get/show方法 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); } }
//测试标准类 package com.itheima09; /* 测试标准学生类 */ public class StudentDemo { public static void main(String[] args){ //使用无参构造创建对象 Student s1 = new Student(); s1.setName("张三"); s1.setAge(20); s1.show(); //使用有参构造创建对象 Student s2 = new Student("李四", 22); s2.show(); } }
本文作者:编程初学者求大佬指点
本文链接:https://www.cnblogs.com/fragmentary/p/16737756.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步