Java基础之类和对象

1 概念    

2 定义

3 对象实例化

3.1 实例化代码

3.2 实例化步骤

 4 属性初始化

4.1 默认值规则

4.2 构造方法规则(也称构造器)

4.3 定义时初始化规则

4.4 构造代码块规则

5 行为

6 this的作用

7 getter和setter的用法(权限控制(权限最小原则)


1 概念    

        类是面向对象语言的程序设计中的概念,是面向对象编程的基础。类是对现实生活中一类具有共同特征的事物的抽象,用来构造对象模板。简单来说,我们可以把具体的对象从三个层次进行解析。假设这个具体的对象是一名学生,在概念层上是学生,在逻辑层上是由学号、姓名、班级等一系列信息组成的一份档案,这些信息特征表现为属性,对其行为抽取表现为方法,在物理层上是在内存中的存储形式。

        面向对象是相对于面向过程来讲的。面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统,更贴近事物的自然运行建模模式。

2 定义

       假设现在有一批学生需要用身高进行排序,这时,只将身高排序是不行的,就需要将姓名和身高进行绑定,然后再进行排序。为实现这样的操作,我们需要构造以下模板(类)。

public class Student {
    //构造对象的语法:在类里、方法外定义一个变量,该变量不加static,又称为属性
    //属性也符合默认值语法
    public String name;
    public int height;
    public String major = "搬砖";
}

3 对象实例化

3.1 实例化代码

//Student视为一种引用类型
//s是变量名,new Student()是利用Student这个类构造的一个新对象(对象的实例化过程)
//s指向这个新对象
Student s = new Student();
System.out.println(s.name);
System.out.println(s.height);
System.out.println(s.major);

3.2 实例化步骤

  • 通过类中的信息,计算对象内存的大小。在堆区由JVM为对象分配内存空间,并且把这关内存区域全部用0进行初始化操作。
  • 执行对象的初始化过程,按照初始化规则调用初始化语句,完成对象的实例化。
  • 通过引用赋值来调用对象。

 4 属性初始化

4.1 默认值规则

    public String name;  //null
    public int height;   // 0

4.2 构造方法规则(也称构造器)

  • 构造方法的名称必须和类名称保持一致
  • 没有返回值类型的声明     
  • 构造器的重载(方法名相同,参数列表不同)   
    //没有构造方法时,编译器默认构造一个无参的构造方法
    //一旦定义了方法,就不会构造默认方法
    //实例化时,根据参数列表选择相应的构造方法进行调用
    public Student(){
        name = "默认值";
        major = "搬砖";
        height = 180;
        //System.out.println("我是无参的构造方法");
    }
    public Student(String a){
        System.out.println("我是String参数的构造方法");
    }

    public Student(String n, int h, String m){
        name = n;
        major = m;
        height = h;
//        name = "lala";
//        height = 180;
//        major = "computer";
    }
    //形参的变量名和属性变量名重复了,在使用时加上this.name就可以调用属性变量\
    public Student(String name ,String major,int height){
        //不使用this.调用形参
//        System.out.println(name);
//        System.out.println(major);
//        System.out.println(height);
        this.name = name;
        this.major = major;
        this.height = height;
    }

4.3 定义时初始化规则

    public String major = "搬砖";

4.4 构造代码块规则

    //出现在类的内部,方法的外部
    {
        System.out.println("我是一个构造代码块");
    }

属性初始化的执行顺序:

        默认值规则->定义时初始化和构造代码块(按书写顺序执行)->构造器。

        下面这段代码的执行的结果为:2->3->4->5->1

public class InitOrderDemo {
    public InitOrderDemo() {//构造器
        System.out.println("1");
    }
    {
        System.out.println("2");//构造代码块
    }
    //定义时初始化
    public int a = InitA();
    public int b = InitB();
    public int InitA() {
        System.out.println("3");
        return 1;
    }
    {
        System.out.println("5");
    }
    public int InitB(){
        System.out.println("4");
        return 2;
    }

    public static void main(String[] args) {
        new InitOrderDemo();
    }
}

注意:如果代码中有静态代码块,则首先执行静态代码块中的内容(静态代码块在类的加载过程中执行)。

5 行为

        在java中以实例方法的形式体现,定义语法中不要加static,可以在实例方法中可以访问属性(和构造方法类似),必须通过引用来操作对象调用实例方法。

静态方法(类方法)加static修饰不能访问属性,可以调用普通方法,可以直接调用不能使用this
普通方法(实例方法)不加static修饰可以访问属性,不能调用普通方法,需要用对象的引用去调用可以使用this

      方法的执行依赖于对象,同样的方法,对象不同,执行的结果也不同。类到对象的过程就是实例化的过程。在静态上下文中无法直接调用普通方法,也不能访问对象的属性。不论是方法还是变量,凡是加了static的都与当前的对象无关,不加static,和本类的对象息息相关。

6 this的作用

  • (1)this是一个引用,类型就是当前类,指向当前对象。例如:class Person{this  类型为Person}
  •  构造器中this指向当前正在构造的对象,例如:this.name
  • (2)在一个构造方法中调用另一个构造方法。
public class UseThisCalledConstructorDemo {
    UseThisCalledConstructorDemo(){
        //this必须在第一行
        this(18);
        System.out.println("无参");
    }
    UseThisCalledConstructorDemo(int a){
        System.out.println("1");
    }
    public static void main(String[] args) {
        new UseThisCalledConstructorDemo();
    }
}

7 getter和setter的用法(权限控制(权限最小原则)

public class Person {
    //getter和setter可以通过Alt+Insert 统一生成
    private String name;//只读权限

    //getter:get属性名称
    public String getName() {
        return name;
    }

    private boolean alive;

    public boolean isAlive() {
        return alive;
    }

    private String sex;//读写权限并且有约束

    public String getSex() {
        return sex;
    }

    //setter:set属性名称
    public void setSex(String sex) {
        if (sex != "男" || sex != "女") {
            return;
        }
        this.sex = sex;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值