Java 精炼解读类和对象原理

面向对象、面向过程

什么是类?

什么是对象?

这是非常抽象的两个概念!!!!!!!!

在说清楚类和对象的概念之前,给大家讲一下什么是面向对象、面向过程,以此来推出我们类和对象的概念。

面向过程:以洗衣服为例:拿盆、放水、放衣服、放洗衣粉、手搓、换水、拧干、晾衣服,这个过程就是面向过程。 

面向对象:以洗衣服为例:人把衣服放进洗衣机,倒入洗衣粉,洗完晾干,不需要关心洗衣服整个过程是怎么完成的,只需要找对象,创建对象,使用对象。在好比我们使用toString函数,我们并不关心toString函数具体的实现过程,我们直接交给Arrays帮我们实现就可以了,这就是面向对象。

对象从哪来的?对象就是从类来的,有类之后才有对象,人,洗衣机 ,洗衣粉,都是单独的一个类。由类再产生对象,我们就叫做创建对象。对象都创建好了,每个对象都具备一些行为一些属性,然后对象之间相互完成就可以了。这就是面向对象和面向过程。

要面向对象,我们就要找到对象,而对象是由类来的,类是从哪来的?我们是需要去抽象的。比如说:我们都是人,人的话都有共同的属性,姓名、性别、年龄、吃饭、睡觉,每个人都会具备这些,相当于这就是一个模板,通过这个模板可以产生很多的对象,这些对象都具备这些相同的属性。就是来抽象这个人,由这个人来创建对象,而这个人就是一个类。真正的要有这样一个人,让他是一个对象,是一个实体,就需要把他创建出来,通过new来创建。

定义类

class Person{

}//定义一个类,这个类叫Person,类名一定要是大驼峰

class Person{
    //类里面包含字段,也叫做属性,也叫做成员变量
    //也包含方法
    //一个类就是由方法和字段组成的
    public String name;//属性
    public int age;//属性
    //什么是方法?可以解读为这个人的行为
    public void eat(){
        System.out.println(name+" 正在吃饭");
    }
    public void sleep(){
        System.out.println(name+" 正在睡觉");
    }

}

由类产生对象的过程,术语我们叫做实例化,通过new关键字来实例化对象。

public class TestDemo {
    public static void main(String[] args) {
        Person person//定义一个变量person,此时类Person也相当于类型的意思,和int a = 10,a的类型是int一样

    }
}

由类Person定义的变量person是引用变量,意味着它的初值可以给null

public class TestDemo {
    public static void main(String[] args) {
        Person person = null;

    }
}

实例化对象

public class TestDemo {
    public static void main(String[] args) {
        Person person = new Person();//由类Person实例化了一个对象

    }
}

一个类可以实例化多个对象

public class TestDemo {
    public static void main(String[] args) {
        Person person = new Person();//由类Person实例化了一个对象
        Person person1 = new Person();
        Person person2 = new Person();
        Person person3 = new Person();
        Person person4 = new Person();

    }
}

类的成员

普通成员变量

字段是定义在类的内部方法的外部,如果定义到方法里头叫做局部变量,定义到方法外头叫做成员变量 

 如何访问成员变量,成员变量分为两种:(普通成员变量、静态成员变量)。普通的成员变量的访问方式通过引用来访问。

成员变量没有赋初值的情况下都有一个默认的值

 如何给成员变量赋值

如果是一个普通的成员变量,它的内存在对象里面,而不是说所有对象共用一份。每个对象都各有一份自己的name和age

方法也分为两种:一种叫做普通成员方法,一种叫做静态成员方法

普通的成员方法访问方式也是一样的,通过对象的引用来访问我的方法。

静态成员变量

被static修饰的的变量叫静态成员变量,也叫做类变量,是放在方法区的

静态成员变量的访问方式是通过类名.静态的成员属性/方法。

不依赖对象

class Person{

    public String name;
    public int age;

    public static int count;

    public void eat(){
        System.out.println(name+" 正在吃饭");
    }
    public void sleep(){
        System.out.println(name+" 正在睡觉");
    }

}

public class TestDemo {
    public static void main(String[] args) {
        Person.count++;
        System.out.println(Person.count);
        System.out.println("================");
        Person.count++;
        System.out.println(Person.count);

    }
}

打印结果;

count是被static修饰的静态成员变量,是放在方法区的,不属于某个对象,属于类。正确的访问静态成员变量或者方法只要  类名.静态成员变量/方法    就可以了,所有静态的东西在方法区里只存一份,所以加2遍都是加的count本身,所以第二次打印的结果是2。

普通的方法内部不能够定义静态的变量

1.static定义的变量是类变量,属于类,(定义在方法内部就属于方法了,所以是错误的)

2.eat方法的调用,需要对应的引用来调用。但如果可以定义static的变量,类Person就可以调用,所以两者直接是矛盾的,eat需要对应的引用来调用。size只需要类就可以调用。所以普通的方法内部, 不能够定义静态的变量。

静态的方法也不可以定义静态变量

static定义的变量是类变量,属于类,(定义在方法内部就属于方法了,这样是做不到的,所以是错误的)

总结:静态的成员变量是不可以在方法中定义的 

普通方法里面是可以调用静态方法的

class Person{

    public String name;
    public int age;

    public static int count;

    public void eat(){

        System.out.println(name+" 正在吃饭");
    }
    public void sleep(){
        staticFunc();
        System.out.println(name+" 正在睡觉");
    }
    public static void staticFunc(){
        System.out.println("static::func");
    }

}

public class TestDemo {
    public static void main(String[] args) {
        Person person = new Person();
         person.eat();
         person.sleep();
    }
}

 打印结果:

 静态方法内部不能调用普通方法

 静态内部不可以调用普通方法,因为静态的方法不依赖于对象, 通过类名就可以调用,但没有对象普通方法没法调用。

main函数为什么是静态的

 一个引用不可以同时指向多个对象

引用肯定是在栈上吗?肯定不是

 看绿线,画图解析

小写的person属于TestDemo这个类的成员变量 

final修饰

private实现封装

private/ public 这两个关键字表示 "访问权限控制"

被 public 修饰的成员变量或者成员方法, 可以直接被类的调用者使用.

被 private 修饰的成员变量或者成员方法, 不能被类的调用者使用.

提供接口

 打印结果:

this代表当前对象的引用

构造方法

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

构造方法是干嘛的?我们需要知道一个对象的产生(对象的实例化) 分为几步

1.为对象分配内存

2.调用合适的构造方法

这就是一个构造方法

前面的访问修饰符可以是public,

 调用构造方法:

打印结果:

不带参数和带一个参数和带两个参数的构造方法

 调用构造方法:

this的区别

第一种:

 第二种:

代表当前对象的eat方法

 第三种:

调用不带参数的构造方法,

 打印结果 :

this函数必须放到第一行,只能存放在构造函数当中

代码块

本地代码块:

两个括号

 实例代码块和静态代码块:

静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的。 静态代码块执行完毕后, 实例代码块(构造块)执行,再然后是构造函数执行。 

太累了,拜拜!!!!!!

到此这篇关于Java 精炼解读类和对象原理的文章就介绍到这了,更多相关Java 类和对象内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Java内部类与对象的打印概念和流程

    目录 一.内部类的概念 二.内部类的分类 三.成员内部类 1.普通内部类 2.静态内部类 四.局部内部类 五.对象的打印 一.内部类的概念 在 Java 中,可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类.内部类也是封装的一种体现. public class OutClass {//外部类 class InnerClass{//内部类 } } 注意事项: 1.内部类一定是定义在class 类名{}之中的类,定义在class 类名{}之外的,哪怕是在一份文件中,也并不

  • Java 类与对象详细

    目录 1.类 2.对象 3.练习 4.练习答案 前言: 早期的Java语言,是面对过程的语言(面向过程指把一个场景分割成一个个的步骤研究),如今的Java已经是面对对象的语言(面向对象指把一个场景分割成一个个的对象研究).面向对象是相比面向过程有很多便利的地方,以后读者会慢慢感受到~ 那么,何谓对象呢?小编正在使用的电脑是一个对象,读者手中的手机是一个对象--对象,指[一个][具体的]物品或者事物(注意对象可以是抽象的东西). 每个对象都有其特征和用途,不同类型的对象特征和用途有所不同.我们把具

  • Java十分钟理清面向对象与类的核心

    什么是对象? 一切客观存在的事物都是对象 对象的组成 属性.行为 类是什么? 类是对大量对象共性的抽象 类是客观事物在人脑中的主观反映 类是创建对象的模板 类的组成 属性.行为 简单的说,一个类就是把公有的特征写在一起,然后由这个类创建的对象,都会都这个属性. 例如人这个类 属性会吃饭,会说话.我们就是对象,我们属于人这个类,因此我们也会吃饭说话. Java中类的定义 语法: public class Student{ //在这里面写成员属性.成员方法 } //Student就是这个类的名字,这

  • Java面向对象之类的继承介绍

    目录 继承的作用 如果没有继承机制是怎么样的? 使用继承机制后的示例? 类的继承是什么? 子类和父类的继承机制 Java单继承 Java继承的顶级父类:Object 对象的类型转换 对象向上转型 对象向下转型 总结 继承的作用 如果没有继承机制是怎么样的? 有以下两个类,分别是Student.Teacher,它们的实现类如下: /** * 老师类 封装了姓名.年龄 * * @author Administrator * */ public class Teacher { private Stri

  • Java 类与对象重难点详解

    目录 什么是类.对象? 类和类的实例化 字段的初始化 类当中实现方法 static 静态关键字 封装 private 实现封装 setter 和 getter 方法 构造方法 this 关键字 匿名对象 什么是类.对象? 因为计算机并不能像我们人这样去理解世界上的东西,所以为了更好的编辑,就抽象出了类和对象.类就是把功能放在一起,然后由一个人去调用这个功能,然后再编辑对应的功能.调用者就是对象的实现者 类和类的实例化 类是一类对象的统称,对象就是这一类具体化的实例 创建类的关键字:class 举

  • 带你用Java全面剖析类和对象

    目录 一.面向过程?面向对象? 二.类和类的实例化 2.1普通成员变量和普通成员方法 2.2 静态成员变量和静态成员方法 三.封装 3.1 private 3.2 getter 和 setter 四.构造方法 4.1 基本语法 4.2 this 关键字 五.代码块 5.1 普通代码块 5.2 构造代码块 5.3 静态代码块 5.4 注意事项 六.快捷方法 6.1 toString方法 6.2 setter / getter 方法 6.3 构造方法(快捷) 总结 一.面向过程?面向对象? C 语言

  • java面向对象编程类的内聚性分析

    目录 类划分时关于内聚性的问题 静态类的设计 高内聚类的设计 附:面向过程编程中模块的内聚性 偶然内聚或巧合内聚(Coincidental) 逻辑内聚(Logical): 时间内聚(Temporal ): 过程内聚: 通信内聚(Communicational): 顺序内聚(Sequential): 功能内聚(Functional): 类划分时关于内聚性的问题 静态类的设计 在软件设计中,我们经常会将一些通用的方法封装到一个类中,这种类只包含方法,没有属性,类中的方法之间没有关联,内聚性最低,属于

  • Java 中的类和对象详情

    目录 1.类的定义 2.类中变量的类型 3.构造方法 4.重载方法 5.继承 5.1 重写方法 6.创建对象 7.访问实例变量和方法 8.比较对象 8.1 使用 == 比较对象 8.2 使用 equals() 比较对象 类可以看成是创建Java对象的模板 1.类的定义 public class Dog { String name; int age; void eat() { } void sleep() { } } 2.类中变量的类型 局部变量:在方法或语句块中定义的变量被称为局部变量.变量声明

  • Java面向对象基础知识之抽象类和接口

    抽象类(abstract): 抽象类不能创建实例,它只能作为父类被继承.抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象.从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类的随意性. (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法 (2) 抽象类不能被实例化 (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类 (4) 具体派生类必须覆盖基类的抽象方法 (5) 抽象派生类可以覆盖基

  • Java中类与对象的相关知识点总结

    目录 一.面向过程与面向对象的理解 二.类与对象的理解与认识 三.类的成员 1.字段/属性/成员变量 2.对null的基本认识 3.方法 (method) 4.static 关键字 四.封装 1. private实现封装 2.getter和setter方法 五.构造方法 1.构造方法的基本语法及使用 2.this关键字 六.Java中的代码块 1.认识代码块 2.普通代码块 3.构造代码块 4.静态代码块 七.toString方法 1.重写println的toString方法 2.匿名对象 八.

随机推荐