java日记----第五天----面向对象

面向对象编程中,类是对象的模板,包含属性(成员变量)和行为(成员方法)。在Java中,先定义类然后创建对象。对象的创建通过`new`关键字。封装是面向对象的特性,通过访问控制修饰符如`private`来保护数据。构造方法用于初始化对象,无参构造器默认提供,带参数构造器允许在创建时设置初始值。Javabean类遵循特定规范,如私有成员变量和公共setter/getter方法。
摘要由CSDN通过智能技术生成

1,什么是面向对象?

  • 面向:拿,找
  • 对象:能干活的东西
  • 面向对象编程:拿东西来做对应的事情

2,设计对象并使用

1,类和对象

  1. 类(设计图纸):是对象共同特征的描述;
  2. 对象:是真实存在的具体东西。

在Java中,必须先设计类,才能获得对象

2,如何定义类

1,类中可包括

  1. 成员变量(代表属性,一般是名词)
  2. 成员方法(代表行为,一般是动词)
  3. 构造器
  4. 代码块
  5. 内部类

2,类的对象创建格式

  • 类名 对象名 = new 类名();
  • 例:Phone p = new Phone();

3,如何使用对象

  • 访问属性(成员变量):对象名.成员变量
  • 访问行为(成员方法):对象名.方法名
  • public class Phone {
        //成员变量,属性:一般只定义,不给值
        String brand;
        double price;
        //成员方法:行为,
        public void call(){
            System.out.println("手机在打电话");
        }
    }
  • public class ceshiphone {
        public static void main(String[] args) {
            //创建手机对象
            Phone p = new Phone();
            //给类的对象赋值
            p.brand = "华为";
            p.price = 2000;
            //获取对象中的值
            System.out.println(p.brand);
            System.out.println(p.price);
            //调用手机中的方法即可
            p.call();
        }
    }

3,类的几个注意事项

定义类的补充注意事项

  • 用来描述一类事物的类,专业叫做Javabean类。在Javabean类中,是不写main方法的。
  • 在以前,编写的main方法的类,叫测试类。我们可以在测试类中创建Javabean类的对象并进行赋值调用。
  • 类名首字母建议大写,需要见名知意,驼峰模式。
  • 一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须是代码文件名。实际开发中建议一个文件定义一个class类
  • 成员变量的完整定义格式是:修饰符  数据类型  变量名称 = 初始值;一般无需指定初始化值,存在默认值。

3,封装

1,什么是封装?

面向对象三大特征(封装、继承、多态)之一

封装重要原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为。

2,private关键字

  1. private是一个权限修饰符
  2. 可以修饰成员(成员变量和成员方法)
  3. 被private修饰的成员只能在本类中才能访问
  4. 可通过set和get方法访问:
public class Sdutents_ceshi {
    public static void main(String[] args) {
        Sdutent st = new Sdutent();
        st.setName("Zhangsan");
        st.setAge(18);
        System.out.println(st.getName());
        System.out.println(st.getAge());
    }
}
public class Sdutent {
    //属性(成员变量)
    private String name;
    private int age;
    //作用:因为private关键字修饰的成员变量不能直接访问
    //所有定义方法使得对象可以调用,给成员变量赋值
    public void setName(String n){
        name = n;
    }
    //作用:向外提供name属性
    public String getName(){
        return name;
    }
    public void setAge(int a){
        if(a>=18&&a<=30){
            age = a;
        }
        else {
            System.out.println("非法参数");
        }
    }
    public int getAge(){
        return age;
    }
}

4,就近原则和this关键字

1,成员变量和局部变量

  • 成员变量:类的里面,方法外面的变量
  • 局部变量:定义在方法内部的变量

2,就近原则

谁离我近就用谁。 

3,this关键字

表示使用成员变量,避免出现自动选择局部变量里的值。

 5,构造方法

1,构造方法的格式

注意事项:

构造方法的定义:

  1. 如果没有定义构造方法,系统将会给出一个默认的无参构造方法
  2. 如果定义了构造方法,系统将不再提供默认的构造方法

构造方法的重载:

  • 带参构造方法和无参构造方法,两者方法名相同,但是参数不同,这叫构造方法的重载

推荐的使用方式:

  • 无论是否使用,都要动手写无参构造方法和带全部参数的构造方法
  • 构造方法概述:构造方法也叫做构造器,构造函数
  • 作用:在创建对象的时候给成员变量进行初始化的。
  • 构造方法格式:

 特点:

  • 方法与类名相同,大小写也要一致
  • 没有返回值类型,连void都没有
  • 没有具体的返回值(不能由return带结果数据)

 执行的时机:

  1. 创建对象的时候由虚拟机调用,不能手动调用构造方法
  2. 每创建一次对象,就会调用一次构造方法
  3. public class Sdutents_ceshi {
        public static void main(String[] args) {
            Sdutent st = new Sdutent();
    
        }
    }
  4. public class Sdutent {
        public Sdutent(){
            System.out.println("我是构造方法");
        }
    }

    输出:我是构造方法

  5. public class Sdutents_ceshi {
        public static void main(String[] args) {
            Sdutent st = new Sdutent("zhangsan",18);
            System.out.println(st.getAge());
            System.out.println(st.getName());
        }
    }
  6. public class Sdutent {
        //属性(成员变量)
        private String name;
        private int age;
        //空参构造
        public Sdutent(){
            System.out.println("我是空参构造");
        }
        //带全部参数的构造方法
        public Sdutent(String name,int age){
            this.name = name;
            this.age = age;
        }
        //作用:向外提供name属性
        public String getName(){
            return name;
        }
        //作用:向外提供age属性
        public int getAge(){
            return age;
        }
    }

    输出:18
               zhangsan

2,构造方法的作用

1,构造方法的作用?

  • 创建对象的时候,由虚拟机自动,给成员变量进行初始化

2,构造方法由哪几种,各自的作用是什么?

  • 无参构造方法:初始化对象时,成员变量的数据采用的是默认值
  • 有参数构造方法:在初始化对象时,同时可以为对象进行赋值

3,构造方法有哪些注意事项

  • 任何类定义出来,默认就自带了无参数构造器,写不写都有
  • 一旦定义了有参数构造器,无参数构造器就没了,此时就需要自己写无参数构造器。
  • 建议任何时候都手动写上空参和带参数的构造方法

 6,标准Javabean

  1. 类名需要见名知意
  2. 成员变量使用private修饰
  3. 提供至少两个构造方法:无参构造方法、带全部参数参数的构造方法
  4. 成员方法:提供每一个成员变量对应的setXxx()/ getXxx(),如果还有其他行为,也行要写上

 7,对象内存图

1,一个对象的内存图

当创建一个对象时:Sdutent s = new Sdutent();,内存会做以下操作:

  1. 加载class文件
  2. 申明局部变量
  3. 在堆内存中开辟一个空间
  4. 默认初始化
  5. 显示初始化
  6. 构造方法初始化
  7. 将堆内存中的地址值赋值给左边的局部变量

 

 

 

2,多个对象的内存图

 

3,两个变量指向同一个对象内存图

 

 

4,this的内存原理 

 例:

5,基本数据类型和引用数据类型的区别

基本数据类型:真实的数据值存储在自己空间中       

  • 特点:赋值给其他变量也是真实值

引用数据类型:数据值存储在其他空间中,自己空间中存储的是地址值        

  • 特点:赋值给其他变量,赋的也是地址值。

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

区别/不同成员变量局部变量
类中位置类中、方法外方法内、方法申明上
初始化值有默认初始化值没有、使用前需要完成赋值
内存位置堆内存栈内存
生命周期随着对象创建而存在,随着对象消失而消失随着方法调用而存在,随着方法运行结束而消失
作用域整个类中有效当前方法中有效

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值