Java类和对象

一.类

面向对象程序设计(简称OOP),面对对象的程序是由对象产生的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分.
OOP是将数据放在第一位,然后在考虑操作数据的算法.
OOP的三大特征:继承 封装 多态

1.1类

(1). 类(class) 是构造对象的模板或者蓝图.
(2). 由类 构造(construct) 对象的过程称为创建类的实例.
(3).封装(encapsulation) 是将数据和行为组合在一个包中.
(4).对象中的数据称为 实例域(instance field).
(5).操纵数据的算法称为 方法(method).
(6).封装的 关键 在于绝对不能让类中的方法直接的访问其他类的实例域.
(7).所有的类都是来自 Object类 . 它是任何类的父类.所有类默认继承此类.
(8).在扩展一个已有的类时,这个扩展后的新类 具有 所扩展的类的 全部属性和方法.通过扩展一个类来建立另外一个类的过程称为 继承.

//创建类
class 类名 {
	类体;
}

代码示例:

class Person {
    public String name;//属性 成员变量 实例成员变量
    public int age;
    public String sex;
    //行为
    public void eat() {
        System.out.println("吃饭!");
    }
    public void sleep() {
        System.out.println("睡觉!");
    }
}

定义了一个Peoson类,这个类由属性和行为构成,属性有nameagesex,行为有eatsleep.
1.2类的实例化
代码示例:

class Person {
    public String name;//属性 成员变量 实例成员变量
    public int age;
    public String sex;
    //行为   方法   成员方法   实例成员方法
    public void eat() {
        System.out.println("吃饭!");
    }
    public void sleep() {
        System.out.println("睡觉!");
    }

    public void show() {
        System.out.println("name: "+name+" age: "+age+" sex: "+sex);
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Person person=new Person();
        person.name="张三";
        person.age=18;
        person.sex="男";
        person.eat();
        person.sleep();
        person.show();
        Person person2=new Person();
        Person person3=new Person();
    }
}
  • 一个类可以new多个对象
  • 使用.来访问对象中的属性和方法.

下图是上面代码的存储方式:
在这里插入图片描述
1.3类的成员
类的成员包含:字段、方法、代码块、内部类和接口等.
1.3.1字段(field)

  • 字段实在类中方法外部定义的变量.
  • 如果一个对象的字段(成员变量)没有显式设置初始值,那么会被设置成一个默认的初值.

1.3.2方法(method)
用于描述一个对象的行为.

class Person {
    public String name;//属性 成员变量 实例成员变量
    public int age;
    public String sex;
    //行为   方法   成员方法   实例成员方法
    public void eat() {
        System.out.println("吃饭!");
    }
    public void sleep() {
        System.out.println("睡觉!");
    }

    public void show() {
        System.out.println("name: "+name+" age: "+age+" sex: "+sex);
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Person person=new Person();
        person.name="张三";
        person.age=18;
        person.sex="男";
        person.eat();
        person.sleep();
        person.show();
    }
}

此处的show方法,表示Person这个对象具有一个“自我展示”的行为.
方法中还有一种特殊的方法称为“构造方法”.
1.4static关键字

  • static修饰的称为静态成员变量.存放在方法区.
  • final修饰的称为常量,也称为实例成员变量.
  • 方法里面属于局部变量,存放在中,在类里面属于实例成员变量存放在中.
  • 静态成员变量的访问( 类名.属性 ).
  • 所有被static所修饰的不论是方法还是成员都不依赖于对象.
  • 静态方法可以访问静态数据成员,并可以更改静态数据成员的.
  • 静态方法不能直接使用非静态数据成员或调用非静态方法.

1.5封装
private/ public 这两个关键字表示 “访问权限控制” .
代码示例

class Person {
    //一般属性都是私有的
    private String name;
    private int age;
    public String getName() {
       return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Person() {
        this("曹操!");
        System.out.println("Person()");
    }
    public Person(String name) {
        this.name=name;
        System.out.println("Person(String)");
    }
    public Person(String name,int age) {
        this.name=name;
        this.age=age;
        System.out.println("Person(String,int)");
    }
    public void show() {
        System.out.println("name: "+name+" age: "+age);
    }
}
public class TestDemo {
    public static void main(String[] args) {
        //会调用合适的构造方法
        Person person=new Person();
        //Person person2=new Person("李四");
        //Person person3=new Person("张三",22);
        //person.setAge(18);
        //person.setName("李四");
       // person.show();
        //System.out.println(person.getAge());
        System.out.println(person.getName());
    }
}
//运行结果:
Person(String)
Person()
曹操!

初始化方式:

  • 提供一系列的get set方法

  • 构造方法: 实例化一个对象-》调用构造方法 new -----();
    如果在实现类的时候,没有写构造方法,那么编译器会自动生成一个不带有参数的构造方法,但是如果自己写了一个不带有参数的构造方法,那么编译器将不会生成.
    构造方法没有返回值.也能发生重载.

      **一个对象的生成分为两步:**
      1.为对象分配内存
      2.调用**合适的构造方法**不止一个
    

this代表当前对象的引用,构造方法执行完对象才产生.

this.成员方法(非静态)
this.成员变量(非静态)
this();  //是语法 通过this调用别的构造方法时,必须放第一行 

代码示例

class Person {
    private String name;
    private int age;
}
public class TestDemo {
    public static void main(String[] args) {
        Person person=new Person();
        System.out.println(person);
    }
}
//运行结果
Person@1540e19d

如果直接打印对象的引用,在底层都会调用Object类中的toString()方法
在这里插入图片描述
重写toString方法:

class Person {
    private String name;
    private int age;

    @Override  //注解   重写 Object的toString方法
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Person person=new Person();
        System.out.println(person);
    }
}
//运行结果:
Person{name='null', age=0}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值