Java面向对象1(有封装)

版权声明:本文为博主原创文章,转载请标注出处:http://blog.csdn.net/EnigmCode。 https://blog.csdn.net/EnigmCode/article/details/79291729

1、面向对象与面向过程

面向过程:拿到一个问题时,分析解决问题的每一个步骤,强调功能行为
面向对象:拿到一个问题时,先分析有那些对象和类,然后再分析这些类和对象具有那些属性和方法,最后分析类与类间的关系
例子:把大象装进冰箱里
面试题:你如何理解面向对象的?

2、类与对象

对象是用于计算机语言对问题区域内中事物的描述,对象通过“属性”和“方法”来分别对应事物具有的静态属性和动态行为。
类是用于描述同一类的对象的一个抽象概念,类中定义了这一类对象所具有的静态属性和动态行为。
综上可以看出:Java中类可以看成一类对象的模版,对象就是由这个模版产生的一个个具体的实例。
对象之间依靠属性的不同来相互区分。

3、类(对象)之间的关系

继承关系:XX是YY的一种
实现关系:指的是一个类实现接口的功能
依赖关系:类A使用到了类B
关联关系:一个对象的实例与另一个对象的一些特定实例存在固定的对应
聚合关系:XX是YY的一部分
组合关系:XX是YY必不可少的一部分
强弱:继承-->组合-->聚合-->关联-->依赖

4、类的组成

(1)成员变量:其实就是变量,只不过定义在类中,方法之外,并且不用初始化
(2)成员方法:就是方法,只不过不需要static修饰
(3)案例:

class Student{ String id; String name; int age; public
void study(){
System.out.println(“看书,学习,写作业”); } }

5、类的使用

(1)创建对象
    格式:类名 对象名 = new 类名();
(2)使用成员
    成员变量:对象名.变量名;
    成员方法:对象名.方法名();

6、成员变量和局部变量的区别

(1)在类中的位置不同
    A:成员变量 类中,方法外
    B:局部变量 方法的形式参数列表中或者方法体中
(2)在内存中的位置不同
    A:成员变量 在堆中
    B:局部变量 在栈中
(3)生命周期不同
    A:成员变量 随着对象的加载而加载,随着对象的销毁而销毁
    B:局部变量 随着方法的调用而存在,随着方法的调用完毕而销毁
(4)初始化值不同
    A:成员变量 有默认初始化值
    B:局部变量 没有默认初始化值,必须先声明,再赋值,最后才能使用

7、形式参数问题

(1)基本类型
    基本类型作为形式参数,需要的是该基本类型的数值。
(2)引用类型
    引用类型作为形式参数,需要的是该引用类型的地址值。

8、匿名对象

(1)匿名对象:没有名字的对象,是对象简化的书写方式
(2)使用场景:
    A:调用方法:仅仅只调用一次
    B:作为参数传递

9、封装

(1)隐藏实现细节,提供公共的访问方式
(2)好处:
    A:隐藏实现细节,提供公共的访问方式
    B:提高代码的复用性
    C:提高了代码的安全性
(3)使用原则
    A:把成员变量隐藏
    B:给出访问该成员变量的对应方法

10、private关键字

(1)是一个权限修饰符
(2)可以修饰类的成员
(3)仅仅在本类中访问
(4)标准实例:

class Student{ private String name; private int age;

      public void setName(String n){
          name = n;           }

      public void getName(){
          return name;            }

      public void setAge(int a){
          age = a;            }

      public void getAge(){
          return age;             }           public void study(){
          System.out.println("看书,学习,写作业");            }       }

11、this关键字

(1)this:代表本类的对象
(2)应用场景:
    A:解决了局部变量隐藏成员变量的问题
    B:其他用法见后文super关键字
(3)标准实例:

class Student{ private String name; private int age;

      public void setName(String name){
          this.name = name;           }

      public void getName(){
          return name;            }

      public void setAge(int age){
          this.age = a;           }

      public void getAge(){
          return age;             }           public void study(){
          System.out.println("看书,学习,写作业");            }           public void show(){
          System.out.println("名字:"+name+",年龄"+age);           }       }       class StudentTest{          public static void main(String[] args){
          Student studenEg = new Student();
          studenEg.setName("刘德华");
          studenEg.setAge(22);
          studenEg.show();
          studenEg.study();
          System.out.println("姓名是:"+studenEg.getName());
          System.out.println("年龄是:"+studenEg.getAge());           }       }

12、构造方法

(1)作用:用来对对象的数据进行初始化
(2)特点:
    A:方法名与类名相同
    B:没有返回值类型
    C:没有返回值
(3)注意事项
    A:如果我们没有写构造方法,系统将默认给出无参构造方法
    B:如果我们写了构造方法,系统将不在给出无参构造方法
    建议:手动给出无参构造方法
(4)给成员变量赋值
    A:无参+setXxx();
    B:带参
(5)标准实例:

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 void getName(){
          return name;            }

      public void setAge(int age){
          this.age = a;           }

      public void getAge(){
          return age;             }           public void study(){
          System.out.println("看书,学习,写作业");            }           public void show(){
          System.out.println("名字:"+name+",年龄"+age);           }       }       class StudentTest{          public static void main(String[] args){
          //无参
          Student studenEg1 = new Student();
          studenEg1.setName("刘德华");
          studenEg1.setAge(22);
          studenEg1.show();
          studenEg1.study();
          System.out.println("姓名是:"+studenEg1.getName());
          System.out.println("年龄是:"+studenEg1.getAge());
          //有参
          Student studenEg2 = new Student("张学友",23);
          studenEg2.show();
          studenEg2.study();
          System.out.println("姓名是:"+studenEg2.getName());
          System.out.println("年龄是:"+studenEg2.getAge());          }       }

13、对象初始化的过程

(1)Student s = new Student();
    A:加载Student.class文件进内存
    B:在栈中为s开辟空间
    C:在堆内存中为学生对象开辟空间
    D:为学生对象的成员变量赋默认值
    E:为学生对象的成员变量显式赋值
    F:通过构造方法给给成员变量赋值
    G:对象构造完毕,把地址赋值给s变量

练习题一:

(1):写一个Demo类,里面有一个求和功能,并测试。
(2):写一个长方形类,里面有一个求周长和面积的功能,并测试。
(3):自己分析员工类,实现,并测试。
(4):写一个包含了加减乘除的类,并测试。

14、static关键字

(1)是一个状态修饰符,静态的意思
(2)可以修饰成员变量和成员方法
(3)特点:
    A:随着类的加载而加载
    B:优先于对象存在
    C:被所有对象共享--这也是判断是不是该使用静态的条件
    D:可以通过类名调用--静态修饰的内容,可以通过类名或者对象名调用,建议使用类名调用
(4)方法访问的特点
    A:普通成员方法:可以访问静态成员变量,非静态成员变量,静态成员方法,非静态成员方法
    B:静态成员方法:只能访问静态成员变量,静态成员方法
    C:注意:
        静态中不能有this。先进入内存的不能访问后进入内存的,但是后进入内存的可以访问先进入的

15、静态成员变量和普通成员变量的区别

(1)所属不同
    静态属于类,称为类变量;非静态属于对象,称为实例变量
(2)内存空间不同
    静态在方法区的静态区域;非静态在堆内存中
(3)生命周期不同
    静态随着类的加载而加载,类的消失而消失;非静态随着对象的创建而存在,对象的销毁而销毁
(4)调用方式不同
    静态可以通过类名或者对象名调用;非静态只能通过对象名调用。

16、main 方法是静态的:public static void main(String[] args){}

17、制作帮助文档与帮助文档的使用

(1)写代码
(2)加文档注释
(3)通过javadoc工具生成说明书

18、看类的方法

public int nextInt()
左边:
    是否静态:说明该方法是否可以通过类名调用
    返回值类型:方法返回什么类型,就用什么类型接收
右边:
    方法名称:方法名不能写错,写错就不能使用
    参数列表:看参数个数,参数类型
        要几个给几个,要什么类型就给什么类型

猜你喜欢

转载自blog.csdn.net/EnigmCode/article/details/79291729