Day09 面向对象

1 面向对象

        1.1 概述

        面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计软件开发,扩展到如数据库系统交互式界面、应用结构、应用平台、分布式系统网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。

        1.2 面向对象跟面向过程

        面向对象   分模块 强调的是高度抽象 

        面向过程  侧重一步步进行 把要完成的功能分析每一步,然后一步一步写函数 调用函数

        面向对象优点 耦合性下降 容易维护 拓展 灵活 但是性能下降

        1.3 构造方法

        构造方法每一个类都有 用于创建该类对象

        如果这个类没有构造方法的话  编译器会自动生成一个无参构造方法;

        如果在该类写了构造方法 那么默认的无参构造将会没有 

        因此我们可以在写有参构造方法的时候 在写一个无参构造

        构造方法声明    修饰符列表(可以没有) 方法名(跟类名一样)(参数列表){}

                参数列表可以没有 没有的话是无参构造

                修饰符列表不能使用static 只使用权限修饰符 public private protected   不写

                没有返回值 更没有void

        1.4 类跟对象

        类:对一类事物客观描述的标准 里面包括相同的属性 行为

        对象 类的实例化 一切皆对象 具体的个体 符合类中的标准 可以给这些属性赋值

        根据不同的属性值区分不同的对象

        根据不同的属性来区分不同的类

        局部变量  方法里面使用 暂时存储数据,作用域在方法体 方法结束也就销毁

        静态变量  类级别的变量 所有该类对象访问这个变量的时候 值是一样的,对象访问相当于使用类名访问

        成员变量 对象级别 所有该类对象都有这个属性 值可能相同可能不同

        如果方法要使用成员变量那么一定是成员方法

        1.5 对象使用

        成员变量是有默认值的

        Student student = new Studen(); 

        System.out.println(s1.id);
        s1.id=10;
        System.out.println(s1.id);
        s1.name="张三";
        System.out.println(s1.name);

        1.6 Bean

        JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。

POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。

使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,没有业务逻辑,有时可以作为VO(value -object)或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。

成员变量是私有的’

getters settets 方法访问变量

具有无参构造方法

类是公共的

        

public class User {
    private int age;
    private String name;
    private  int  password;
    //无参构造
    public User(){
        
    }
    //全参构造    这样的话会不用使用很多set方法来初始化 直接在构造的时候初始化
    public User(int age,int password,String name){
        this.age=age;
        this.password=password;
        this.name=name;
        
    }
    //带参构造
    public User(int age,String name){
        this.age=age;
        this.name=name;
        
    }
    //get set 方法让对象访问修改成员变量
    public void setUsername(String name){
        //成员方法直接使用成员变量
        //this代表当前对象谁调用这个方法 this代表的就是哪个对象

        this.name=name;
    }
    public String getUsername(){
        return name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getPassword() {
        return password;
    }
    public void setPassword(int password) {
        this.password = password;
    }

}

        通过set get 方法是类里面的数据封装 这样不能直接被访问修改利于代码安全以及维护

    1.7实例化

        创建一个类的对象

        Student student =new Student();

        new 会在堆内存开辟新的空间存储对象成员属性

        调用构造方法(构造方法压栈)对堆内存的数据初始化,如果沒有传输数据就赋予默认值

        构造方法执行完 弹栈 然后堆内存地址赋予给调用处student;

        ① 加载客户端OOP_03

        ②调用客户端main方法压栈

        ③加载Student类到静态区

        ④开辟堆内存空间 

        ⑤调Student里面的构造方法压栈对成员属性初始化

        ⑥构造方法弹栈 堆内存地址赋予调用处

        1.8 常见异常

        Exception in thread "main" java.lang.NullPointerException

        空指针异常        

        public static void main(String[] args) {
        User u1=new User();
        u1=null;// u1指向了空就找不到堆内存里面的数据
        System.out.println(u1.getAge());
    }

    1.9对象调用静态属性

        对象可以调用静态变量

        public class OOP_05 {
    //静态变量
    static int a=10;
    //成员变量
    int b=20;
    public static void main(String[] args) {
        int a=5;
        OOP_05 s1=new OOP_05();
        System.out.println(s1.b);
        s1=null;
        //因为a不在堆区 所以s1即使改了指针为null,编译时会把对象名改为类名.a
        System.out.println(s1.a); //10
        System.out.println(OOP_05.a); //10
        System.out.println(a); //5
        //this 不会用在静态方法里面
        //System.out.println(this);
        
        
    }

1.10注意事项

1.10.1 静态调用成员

         静态方法里面无法直接使用成员变量

1.10.2  传值和传引用

       

        与数组类似 都是引用数据类型

        

public class OOP_06 {
    public static void main(String[] args) {
        Test t=new Test(11);
        m1(t);
        System.out.println(t.age); //10
        
    }
    public static void m1(Test t){
        int age=12;
        t.age=10;
        System.out.println(age);
    }

}
class Test{
    int age;
    Test( int age){
        this.age=age;
    }
}

1.10.3区分成员方法与构造方法

        public static void main(String[] args) {
        new OOP_07(11);
        new OOP_07();
        //new OOP_07(" "); 出错这个不是构造方法是成员方法
        
    }
    public OOP_07(int a){
        
    }
     OOP_07() {
        
    }
     //成员方法可以和类名一样
     //如何区分同名的成员方法跟构造方法 就看有没有返回值 构造方法没有返回值更没有void

     public void OOP_07(String s){
         
     }
    

        

        

        

        

     

                       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值