什么是对象 在现实世界里面,万物皆对象,客观存在的事物皆对象
面向对象: 你不需要去做某一件事,而是让别人帮你完成
面向过程: 所有的东西都是由你自己来完成
类和对象的关系 现实世界中,类是描述描述一系列具有共同属性以及行为的事物,而对象就是这个描述的具体存在 现实世界里面先有对象,再有类 在Java中,先有类,再有对象;我们在电脑中关注的是事物的信息,然后事物的信息要存在就要先有类型【其实类的先存在是为了开辟内存】 因为类是对象的数据类型
什么是类 类是对现实生活中一类具有共同属性和行为的事物描述和抽象
类的特点:
类是对象的基本(数据)类型行为:对象能够执行的操作
类:类是对现实生活中一类具有共同属性和行为的事物描述和抽象 对象:能够看得到摸得着的真实存在的实体
类的重要性:是Java的基本组成单位
类:对具有共同属性及行为的一系列的事物描述【类是虚的,只是一段描述信息】 属性:其实就是用来形容(描述)这个物体具备的特征(有些什么东西) 行为:能做一些什么东西,具备什么的功能
类的定义步骤: 1.定义类 2.编写类的成员变量 3.编写类的成员方法
类的组成: 属性: 成员变量(变量) 数据类型 变量名; 行为: 成员方法(方法) 把多句代码放在一起,让它具备一定功能
我们现在写的这种类里面没有main方法
一个类中具备属性以及行为是非常多的,我们不可能一一去写,只写我们关注的就行 //JavaBean 封装类
一般方法通用格式: pubic static 数据类型/void 方法名(数据类型 变量名,数据类型 变量, ){ return 数据; }
类中方法格式()去掉static: pubic 数据类型/void 方法名(数据类型 变量名,数据类型 变量, ){ return 数据; }
我们是在测试类中写main方法,测试类主要的作用就是用来创建对象以及使用对象的属性和方法
创建对象
格式:类名 对象名=new 类名();//地址值范例:Phone p = new Phone();使用对象 1.使用成员变量 格式:对象名.变量名 范例:p.brand 2.使用成员方法 格式:对象名.方法名() 范例:p.call();
栈内存:方法运行时的内存 包含局部变量、形参 堆内存:开辟内存,new出来的东西都在这 方法区内存:主要用来加载class文件(解析字节码)
成员变量和局部变量的区别:
区别成员变量局部变量定义位置类中方法外方法声明上或者方法的内部内存的位置堆内存中栈内存中生命周期随着对象的创建而创建,随着对象的消失而消失随着方法的进栈而创建,随着方法弹栈而消失默认初始化值系统默认需要自定义小结: 1.没有private出现的问题? 因为可以直接去给成员变量赋值,所以这个时候我们成员变量是不安全的,因为可以随便赋值
2.private关键字 private修饰的成员只能够在本类中访问,不能在别的类中访问(若没有private,别的类可以p.name="xxx"进行定义)
3.封装的步骤 在封装类中提供get/set方法 用来获取/设置值
get->获取得到 getName getAge
set->设置 setName setAge
private的使用格式:
private 数据格式 变量名
注意: 1.成员变量一旦私有(被private修饰)后,其他类就不能直接访问该成员变量,如果要访问,可以通过setXxx来修饰值,getXxx来获取。(Xxx代表变量,首字母大写,如setAge/getAge方法) 2.成员变量私有,然后提供get/set方法是为了提高代码安全性。 3.在开发的时候,我们并不一定在setXxx中做参数的校验 4.成员变量私有和提供配套的getter和setter方法已经成为java设计的一种规范
快捷键: 鼠标右键–>Gennerate–>Getters and Setters–>command+a(全选)–>Enter
priviat String name;
private void setName(String name){ //name = name; // 此处两个name均为局部变量,所以无法为成员变量赋值 this.name = name;//用this修饰的变量用于指代成员变量,成功为成员变量赋值 }
this修饰的变量用于指代成员变量 解决局部变量隐藏成员变量
this代表当前调用方法的对象
public class StudentTest { public static void main(String[] args) { Student s = new Student(); s.setName("老张"); System.out.println("s-->"+s); } } public class Student { public String getName() { return name; } public void setName(String name) { this.name = name; System.out.println("this-->"+this); } public int getAge() { return age; } public void setAge(int age) { this.age = age; } private String name; private int age; public Student() { } }输出结果: 从运行结果我们可以看出this和s所指向的内存地址哈希值一样。
this被哪一个对象的方法调用,this就代表哪个对象
如果成员变量和局部变量同名时候,使用this可以让成员变量覆盖局部变量
this在测试类中不能使用,能在封装类只使用
1.封装概述 是面向对象三大特征之一(封装、继承、多态) 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内,外界是无法直接操作的
2.封装原则 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的get/set方法进行访问
3.封装的好处 通过方法来控制成员变量的操作,提高代码的安全性 把代码用方法来封装,提高代码的复用性
构造方法是一种特殊的方法 作用:创建对象,在创建对象的同时,完成成员变量的初始化
格式:
public class 类名{ 修饰符 类名(参数){ } }
有参构造方法可以在创建对象时候给成员变量赋值
1.构造方法的创建
当class中无无参构造方法时,会默认创建一个无参构造方法(编译不会报错)当class中含有构造方法时,不会创建无参构造方法建议:不管我们有没有写构造泛方法,都把无参和满参都写上
2.构造方法的重写
标准的封装类: 1.私有所有的属性 2.给所有的属性提供对应 get/set方法 3.给这个类提供无参以及满参构造
快捷键: 鼠标右键—>Generate—>Constructor—>select all(无参构造方法)/command+a+enter(全参构造方法)
Memorial Day is 387 daysI miss youxiaokeai