Java中的类和对象简介

基本概念
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。JAVA是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
面向过程:注重的是过程,在整个过程中所涉及的行为,就是功能。
面向对象:注重的是对象,也就是参与过程所涉及到的主体。是通过逻辑将一个个功能实现连接起来。

类和类的实例化
类就是一类对象的统称。对象就是这一类具体化的一个实例。类相当于一个模板,对象是由模板产生的样本。一个类,可以产生无数的对象。声明一个类就是创建一个新的数据类型,而类在 Java 中属于引用类型, Java 使用关键字 class 来声明类。
用类类型创建对象的过程,称为类的实例化。实例化出的对象占用实际的物理空间,存储类成员变量,做个比方类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西。

// 创建类
class Person {
    //成员属性 实例变量
    public int age = 18; //字段
    public String name = "张三";
    public String sex = "男";

    public void eat() {//成员方法
        System.out.println("吃饭!");
    }
    public void sleep() {
        System.out.println("睡觉!");
    }
    public void show() {
        System.out.println("我叫" + name + ", " + sex + ", 今年" + age + "岁");
    }
}
    public static void main1(String[] args) {
        Person person = new Person();//通过new实例化对象
        person.eat();//成员方法调用需要通过对象的引用调用
        person.sleep();
        //产生对象     同一个类可以创建多个实例化对象
        Person person2 = new Person();
        Person person3 = new Person();
        //访问字段
        System.out.println(person.name);
        System.out.println(person.age);
        System.out.println(person.sex);
        // 获取字符串长度
        System.out.println(person.name.length());
        //方法 用于描述一个对象的行为
        person.show();
        //show 方法是和 person 实例相关联的.
        //如果创建了其他实例, 那么 show 的行为就会发生变化
        person2.name = "李四";
        person2.age = 20;
        person2.show();
    }

类的成员
类的成员可以包含以下:字段、方法、代码块、内部类和接口等。
在类中, 但是方法外部定义的变量。这样的变量我们称为 “字段” 或 “属性” 或 “成员变量”(三种称呼都可以,一般不会严格区分)。

class Person {
    public int age;//实例变量   存放在对象内
    public String name;//实例变量
    public String sex;//实例变量
    public static int count;//类变量也叫静态变量,编译时已经产生,属于类本身,且只有一份。存放在方法区
    public final int SIZE = 10;//被final修饰的叫常量,也属于对象。 被final修饰,后续不可更改
    public static final int  COUNT = 99;//静态的常量,属于类本身,只有一份 被final修饰,后续不可更//实例成员函数
    public void eat() {
       int a = 10;//局部变量
       System.out.println("eat()!");  
   }
    //实例成员函数
    public void sleep() {
       System.out.println("sleep()!");  
   }
    //静态成员函数
     public static void staticTest(){
         //不能访问非静态成员
        //sex = "man"; error
        System.out.println("StaticTest()");
     }
}
public class Main{
 public static void main(String[] args) {
        //产生对象 实例化对象
        Person person = new Person();//person为对象的引用
        System.out.println(person.age);//默认值为0
        System.out.println(person.name);//默认值为null
        //System.out.println(person.count);//会有警告!
        //正确访问方式:
        System.out.println(Person.count);
        System.out.println(Person.COUNT);
        Person.staticTest();
        //总结:所有被static所修饰的方法或者属性,全部不依赖于对象。
        person.eat();
        person.sleep();
 }
}

static关键字
a) 修饰属性,Java静态属性和类相关,和具体的实例无关。换句话说,同一个类的不同实例共用同一个静态属性。
b) 修饰方法,如果在任何方法上应用 static 关键字,此方法称为静态方法。

    public static void main2(String[] args) {
        Test t1 = new Test();
        t1.a++;
        Test.count++;
        System.out.println(t1.a);
        System.out.println(Test.count);
        System.out.println("============");
        //count被static所修饰,所有类共享。
        Test t2 = new Test();
        t2.a++;
        Test.count++;
        System.out.println(t2.a);
        System.out.println(Test.count);

        Test.change(); //无需创建实例对象 就可以调用
        System.out.println(Test.count);
    }
class Test{
    public int a;
    //修饰属性
    public static int count;
    //修饰方法
    public static void change() {
        count = 100;
        //a = 10; error 不可以访问非静态数据成员
    }
}

封装
private/ public 这两个关键字表示 “访问权限控制” 。
被 public 修饰的成员变量或者成员方法,可以直接被类的调用者使用。
被 private 修饰的成员变量或者成员方法,不能被类的调用者使用。
如果需要获取或者修改这个 private 属性,就需要使用 getter / setter 方法。

    //封装
    public static void main3(String[] args) {
        Person2 person2 = new Person2();
        System.out.println("我叫" + person2.name + ", 今年" + person2.age + "岁");
        Person3 person3 = new Person3();
        person3.show();

        Person4 person4 = new Person4();
        person4.setName("李四");
        person4.setAge(18);
        String name = person4.getName();
        System.out.println(name);
        person4.show();
    }
//直接使用 public封装
class Person2 {
    public String name = "张三";
    public int age = 20;
}

//使用 private 封装属性, 并提供 public 方法供类的调用者使用.
class Person3 {
    private String name = "张三";
    private int age = 20;

    public void show() {
        System.out.println("我叫" + name + ", 今年" + age + "岁");
    }
}

//getter和setter方法
class Person4 {
    private String name;//实例成员变量
    private int age;

    public void setName(String name){
        //name = name;//不能这样写
        this.name = name;//this引用,表示调用该方法的对象
    }
    public String getName(){
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void show(){
        System.out.println("name: "+name+" age: "+age);
    }
}

构造方法
构造方法是一种特殊方法,使用关键字new实例化新对象时会被自动调用,用于完成初始化操作。

//构造函数
class Person5 {

    private String name;//实例成员变量
    private int age;
    private String sex;
    //默认构造函数 构造对象
    public Person5() {
        this.name = "caocao";
        this.age = 10;
        this.sex = "男";
    }
    //带有3个参数的构造函数
    public Person5(String name,int age,String sex) {
        //this关键字
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public void show(){
        System.out.println("name: "+name+" age: "+age+" sex: "+sex);
    }

}
    public static void main4(String[] args) {
        Person5 p1 = new Person5();//调用不带参数的构造函数 如果程序没有提供会调用不带参数的构造函数
        p1.show();
        Person5 p2 = new Person5("zhangfei",80,"男");//调用带有3个参数的构造函数
        p2.show();
    }

代码块
使用 {} 定义的一段代码。

public static void main5(String[] args) {
        Person6 p1 = new Person6();
        Person6 p2 = new Person6();

    }
    //代码块
class Person6{
    private String name;//实例成员变量
    private int age;
    private String sex;
    private static int count = 0;//静态成员变量 由类共享数据 方法区

    public Person6(){
        System.out.println("I am Person init()!");
    }

        //实例代码块
        {
         this.name = "zhangsan";
         this.age = 18;
         this.sex = "man";
         System.out.println("I am instance init()!");
         }

        //静态代码块
        static {
        count = 10;//只能访问静态数据成员
        System.out.println("I am static init()!");
        }

    public void show(){
        System.out.println("name: "+name+" age: "+age+" sex: "+sex);
    }
}

匿名对象
没有引用的对象称为匿名对象,匿名对象只能在创建对象时使用,如果一个对象只是用一次,后面不需要用了,可以考虑使用匿名对象。

//匿名对象
class Person7 {
    private String name;
    private int age;
    public Person7(String name,int age) {
        this.age = age;
        this.name = name;
    }
    public void show() {
        System.out.println("name:"+name+" " + "age:"+age);
    }
}
public static void main(String[] args) {
        new Person7("caocao",19).show();//通过匿名对象调用方法
        
    }
发布了30 篇原创文章 · 获赞 31 · 访问量 1947

猜你喜欢

转载自blog.csdn.net/CCCC_CSDN_LI/article/details/105665223