认识类与对象

目录

1、类与对象

1.1类与对象的关系

1.2类的定义格式

1.3定义成员变量

1.4定义成员方法

 1.5扩展

 重点

重点1

重点2

2、  构造方法

3、代码块


1、类与对象

1.1类与对象的关系

对象从类中得来,由类得到对象的过程称为实例化。在面向对象的思想中,最核心的就是对象。为了在程序中创建对象,首先需要定义一个类。类是对象的抽象,它用于描述一组对象的共同特征和行为,例如人都有姓名、年龄、性别等特征,还有学习、工作、购物等行为。以面向对象的编程思想,就可以将某一类中共同的特征和行为封装起来,把共同特征作为类的属性(也叫成员变量),把共同行为作为类的方法(也叫成员方法)。

1.2类的定义格式

Java中的类是通过class关键字来定义的,其语法格式如下:

[修饰符] class 类名 [extends 父类名] [implements 接口名]{
    // 类体,包括类的成员变量和成员方法
 }

在上述语法格式中,class前面的修饰符可以是public,也可以不写(默认);class之后是定义的类名,类名首字母要大写,并且其命名要符合标识符的命名规则。后面大括号{}中的内容是类体,即需要在类中编写的内容,它主要包括类的成员变量和成员方法。

1.3定义成员变量

类的成员变量也被称作类的属性,主要描述对象的特征。例如,一个人的基本属性特征有姓名、年龄、职业、住址等信息,在类中要使用姓名、年龄等信息时,就需要先将它们定义为成员变量。定义成员变量的语法格式如下:

[修饰符] 数据类型 变量名 [ = 值];


在上述语法格式中,修饰符为可选项,用于指定变量的访问权限,其值可以是public、private等;数据类型可以为Java中的任意类型;变量名是变量的名称,必须符合标识符的命名规则,它可以赋予初始值,也可以不赋值。通常情况下,将未赋值(没有被初始化)的变量称之为声明变量,而赋值(初始化)的变量称之为定义变量。

例如,姓名和年龄属性在类中的声明和定义方式如下:

public String name; // 声明一个String类型的name;

public int age = 20; // 定义一个int类型的age,并赋值为20;

1.4定义成员方法

成员方法也被称为方法,它主要用于描述对象的行为。一个人的基本行为特征有吃饭、睡觉、运动等,这些行为在Java类中,就可以定义成方法。

定义一个方法的语法格式如下:

[修饰符] [返回值类型] 方法名([参数类型 参数名1,参数类型 参数名2,...]){ 
    //方法体
    ...
     return 返回值; //当方法的返回值类型为void时,return及其返回值可以省略
  }

上面语法格式中,[]中的内容表示可选,各部分的具体说明如下:

● 修饰符:方法的修饰符比较多,有对访问权限进行限定的(如public、protected、private),有静态修饰符static,还有最终修饰符final等。

● 返回值类型:用于限定方法返回值的数据类型,如果不需要返回值,可以使用void关键字。

● 参数类型:用于限定调用方法时传入参数的数据类型。

● 参数名:是一个变量,用于接收调用方法时传入的数据。

● return关键字:用于结束方法以及返回方法指定类型的值,当方法的返回值类型为void时,return及其返回值可以省略。

● 返回值:被return语句返回的值,该值会返回给调用者。

 1.5扩展

了解了类及其成员的定义方式后,接下来通过一个具体的案例来演示一下类的定义。

public class Person {
        int age;        // 声明int类型的变量age
        // 定义 speak() 方法
        void speak() {  
            System.out.println("我今年" + age + "岁了!");
        }
}

定义了一个Person类,并在类中定义了类的成员变量和成员方法。其中,Person是类名,age是类的成员变量,speak()是类的成员方法。在成员方法speak()中可以直接访问成员变量age。
 

注意:在Java中,定义在类中的变量被称为成员变量,定义在方法中的变量被称为局部变量。如果在某一个方法中定义的局部变量与成员变量同名,此时方法中通过变量名访问到的是局部变量,而并非成员变量,请阅读下面的示例代码:

public class Person {
    int age = 10;    // 类中定义的变量被称作成员变量
    void speak() { 
      int age = 30; // 方法内部定义的变量被称作局部变量
      System.out.println("我今年" + age + "岁了!");
    }
}

输出的值为30,而不是10。

 重点

重点1

1.普通方法内部不能定义静态的变量(static定义的变量是类变量,属于类的)

2.静态方法内部不能够调用普通的方法(eat方法的调用需要对象的引用来调用。但是如果可以定义static的变量,Person就可以调用)

重点2

1.这个引用不指向任何对象

Person person=null;

2.person2这个引用指向person这个引用所指向的对象

Person person=new person();
Person person2=person;

 3.一个引用不能够同时指向多个对象,最终指向的对象为最后所指向的对象

Person person=new person();
person=new person();
person=new person();
person=new person();
person=new person();

 4.引用不一定是在栈上

 理解1

class TestDemo{
    public int a;
    public static int count;
}
public class Main {
    public static void main(String[] args) {
        TestDemo t1 = new TestDemo();
        t1.a++;
        TestDemo.count++;
        System.out.println(t1.a);
        System.out.println(TestDemo.count);
        System.out.println("=========");
        TestDemo t2 = new TestDemo();
        t2.a++;
        TestDemo.count++;
        System.out.println(t2.a);
        System.out.println(TestDemo.count);
    }
}

 

 封装起来了,只能在当前类中使用

private String name;

 理解2

public class TestDemo {
    static class Person {
        public int age=19;
        public String name;

        public int getAge() {
            return age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public static void main(String[] args) {
            Person person = new Person();
            person.name = "bit";
            person.setName("bit");
            person.setAge(10);
            System.out.println(person.getName());
            System.out.println(person.getAge());
        }
    }
}

2、  构造方法

方法名与类名是相同的,且构造方法比较特殊,没有返回值。

构造方法用于一个对象的产生(对象的实例化)—>1.为对象分配内存;2.调用合适的构造方法(构造方法不止一种)

1、如果没有实现任何的构造方法,编译器会帮我们默认生成一个不带任何参数的构造方法,也就是说一个类至少有一个构造方法,哪怕你没写。

2、如果当前类有其他的构造方法,编译器就不会帮我们生成不带参数的构造方法。

3、构造方法之间可以构成重载。


面向问题:this和super

this:1.this.data   调用当前对象的属性

         2.this.func()   调用当前对象的方法

         3.this.()       调用当前对象的其他构造方法;this.()存放在构造函数中

3、代码块

1.实例代码块

2.静态代码块

3.本地代码块

4.同步代码块

静态代码块不用实例化对象也能执行一次

class Person{
    {
        System.out.println("实例代码块!");
    }

    static {
        System.out.println("静态代码块!");
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Person person1 = new Person();
        System.out.println("==========");
        Person person2 = new Person();
    }
}


 都是静态的,和定义顺序无关(例外:count没有初始化时)

  对比count=10和没有初始化时,不同定义顺序时的运行结果

class Person {
    public static int count=10;
    static {
        count =99;
        System.out.println("静态代码块!");
    }
    //public static int count=10;
}
public class TestDemo {
    public static void main(String[] args) {
        System.out.println(Person.count);
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值