类与对象
-
什么是面向对象:
- 洗衣服:
- 面向过程:把衣服脱下来 -> 找一个盆 -> 放洗衣粉 -> 加点水 -> 浸泡几分钟 -> 搓洗 -> 清洗衣服 -> 拧干 -> 晾起来
- 面向对象:把衣服脱下来 -> 打开全自动洗衣机 -> 扔进去 -> 按按钮 -> 拿出来晾起来
- 区别:
- 面向过程:强调步骤
- 面向对象:强调对象,这里的对象就是洗衣机
- 特点:面向对象思想是一种更符合我们思考习惯的思想,
- 洗衣服:
-
什么是类
- 类:是一组相关属性和行为的集合。可以看成可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物
- 属性:就是该事物的状态信息
- 行为:就是该事物能做什么
- 举例:小猫
- 属性:名字、体重、年龄、颜色
- 行为:走、跑、叫
-
什么是对象
- 对象:是一类事物的具体体现,对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性和行为
- 举例:一只小猫
- 属性:tom、5kg、2 years、yellow
- 行为:溜墙根走、蹦跶的跑、喵喵叫
-
类与对象的关系
- 类是对一类事物的描述,是抽象的
- 对象是一类事物的实例,是具体的
- 类是对象的模板,对象是类的实体
-
事物与类的对比
- 属性:事物的状态信息 行为:对事物的行为
- 成员变量:对应事物的属性 成员方法:对应事物的行为
-
类的定义格式
public class ClassName{ 成员变量 成员方法 }
- 定义类:就是定义类的成员,包括成员变量和成员方法
- 成员变量:和以前定义变量几乎是一样的,只不过位置发生了改变,在类中方法外
- 成员方法:和以前方法几乎一样,只不过把static去掉(后面详解static的作用)
public class Student { 成员变量 String name; int age; char sex; //成员方法 public void eat(){} public void sleep(){} public void study(){} }
-
对象的使用
-
导包 :也就是告诉编译器类在什么位置
-
导包格式: import 包名.类名
import java.utill.Scanner
-
创建对象
-
格式: 类名 对象名 = new 类名();
Student s1=new Student();//s1就是一个对象
-
-
使用对象访问类中的成员
-
格式:
- 对象名.成员变量
- 对象名.成员方法();
s1.name;//访问成员变量 s1.eat();//访问成员对象
对象使用格式举例
public class Test01_Student { public static void main(String[] args) { //创建对象格式:类名 对象名 = new 类名(); Student s = new Student(); System.out.println("s:"+s);//cn.itcast.Student@100363 //直接输出成员变量值 System.out.println("姓:"+s.name);//null System.out.println("年龄:"+s.age); //0 System.out.println("‐‐‐‐‐‐‐‐‐‐"); //给成员变量赋值 s.name = "赵丽颖"; s.age = 18; //再次输出成员变量的值 System.out.println("姓名:"+s.name);//赵丽颖 System.out.println("年龄:"+s.age); //18 System.out.println("‐‐‐‐‐‐‐‐‐‐"); //调用成员方法 s.study(); // "好好学习,天天向上" s.eat(); // "学习饿了要吃饭" }
-
-
成员变量的默认值
类型 数据类型 默认值 基本类型 整数型(byte,short,int,long) 0 基本类型 浮点型(float,double) 0.0 基本类型 字符型(char) ‘\u0000’ 基本类型 布尔型(Boolean) false 引用类型 数组,类,接口 null
-
-
类与对象练习:
//定义手机类 public Class Phone{ //成员变量 String brand;//品牌 int price;//价格 String color;//颜色 //成员方法 public void call(){ System.out.println("打电话"); } public void sendMessage(){ System.out.println("群发短信") } }
//定义测试类 public class TestPhone{ public static void main(String[] args){ Phone p = new Phone();//创建对象 System.out.println("品牌:"+p.brand);//null System.out.println(" 价 格 :"+p.price);//0 System.out.println("颜色:"+p.color);//null //给成员变量赋值 p.brand="锤子"; p.price=2999; p.color="棕色"; //再次输入成员变量的值 System.out.println("品牌:"+p.brand);//锤子 System.out.println(" 价 格 :"+p.price);//2999 System.out.println("颜色:"+p.color);//棕色 //成员方法 p.call(); p.sendMessage(); } }
-
成员变量和局部变量的区别
public class Car{ String color;//成员变量 public void drive(){ int speed=80;//局部变量 System.out.println("时速":+speed); } }
- 在类中的位置不同
- 成员变量:类中,方法外
- 局部变量:方法中或者方法声明上(形式参数)
- 作用范围不一样
- 成员变量:类中
- 局部变量:方法中
- 初始化值的不同
- 成员变量:有默认值
- 局部变量:没有默认值。必须先 定义,赋值,最后使用
- 在内存中的位置不同
- 成员变量:堆内存
- 局部变量:栈内存
- 生命周期不同
- 成员变量:随着对象的创建而存在,随着对象的消失而消失
- 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
- 在类中的位置不同
三大特征:封装,继承,多态之封装
-
原则:将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问
-
封装的步骤
- 使用private关键字来修饰成员变量
- 对需要访问的成员变量,提供对应的一对getXXX方法,setXXX方法
-
private关键字
-
含义
- private是一个权限修饰符,代表最小权限
- 可以修饰成员变量和成员方法
- 被private修饰后的成员变量和成员方法,只在本类中才能访问
-
-
使用格式
-
private:
private 数据类型 变量名;
public class Student{ private String name; private int age; }
-
提供getXXX方法,setXXX方法,可以访问成员变量
public class Student{ private String name; private int age; } public void setName(String n){ name=n; } public String getName(){ return name; } public void setAge(int a){ age=a; } public int getAge(){ return age; }
肯定有同学会问,有this为啥不用this呢,同学莫慌,后面就有,循环渐进
-
-
封装优化1——this关键字
-
含义:this代表所在类的当前对象引用(地址值),即对象自己的引用
- 记住:方法被哪个对象调用,方法中的this就代表哪个对象。即谁在调用,this就代表谁
-
this使用格式
this.成员变量名
-
使用this修饰方法中的变量,解决成员变量被隐藏的问题
public class Student{ private String name; private int age; public void setName(String name){ //name =name相当于之前的name=n; this.name=name } public String getName(){ return name; } public void setAge(int age){ //age=age相当于age=a; this.age=age; } public int getAge(){ return age; } }
idea中快捷键(其中一中方式):
1.光标移至类中
2.alt+insert快捷键
3.选中Getter and Settet
4.全选所有的成员变量
5.ok
-
-
-
封装优化2——构造方法
-
含义:构造方法又叫构造器,当一个对象被创建的时候,构造方法用来初始化该对象,给对象的成员变量赋初值
- 无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法, 一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效
-
定义格式
修饰符 构造方法名(参数列表){ 方法体 }
public class Student{ private String name; private int age; //空参构造器 public Student(){ } //全参构造器 public Student(String name,int age){ this.name=name; this.age=age; } }
-
注意事项
- 如果你不提供构造方法,系统会给出无参数构造方法
- 如果你提供了构造方法,系统将不再提供无参数构造方法
- 构造方法是可以重载的,既可以定义参数,也可以不定义参数
-
-
标准代码——JavaBean规范
-
JavaBean是java语言编写类的一种标准规范。符合JavaBean的类,要求类必须是具体的 和 公共的,并且具有无参数的构造方法,提供用来操作成员变量的set和get方法
-
标准格式
public class ClassName{ //成员变量 //构造方法 //无参构造方法(必须) //有参构造方法【建议】 //成员方法 //getXXX() //setXXX() }
-
编写符合JavaBean规范的类,以学生类为例
public class Student{ //成员变量 private String name; private int age; //构造方法 public student(){}//无参构造 public student(String name,int age){//全参构造 this.name=name; this.age=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 class TestStudent{ public static void main(String[] args){ Student s=new Student();//无参构造使用 s.setName("柳岩"); s.setAge(18); System.out.println(s.getName()+"---"s.getAge()); Student s2=new Student("赵丽颖",18);//带参构造使用 System.out.println(s2.getName()+"---"+s2.getAge()); } }
-