面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。 面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。【百度百科】


在java中定义类时需要用到class关键字,具体语法如下
// 创建类
class ClassName{
field; // 字段(属性) 或者 成员变量
method; // 行为 或者 成员方法
}举例如下:


举一反三:我们来定义一个书的类:


定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,只不过int和double是java语言自带的内置类型,而类是用户自定义了一个新的类型,比如上述的:PetDog类和Student类。它们都是类(一种新定义的类型)有了这些自定义的类型之后,就可以使用这些类来定义实例(或者称为对象)。 用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。

我们先来看一个代码:


这是因为当形参名和成员变量名相同时,编译器会认为这是同一个值,**C语言中规定局部变量优先,只是形参自己给自己赋值了,根本没有赋值到成员变量中。**所以打印的值为默认的值。0


构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。

构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。
构造方法的特点:
注意: this(…)必须是构造方法中第一条语句 不能形成环

在声明成员变量时,就直接给出了初始值。

代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中
面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。 封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互
Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了四种访问限定符:

比如: public:可以理解为一个人的外貌特征,谁都可以看得到 default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了 private:只有自己知道,其他人都不知道 【注意】: default权限指:什么都不写时的默认权限 访问权限除了可以限定类中成员的可见性,也可以控制类的可见性 这些访问修饰限定符,只是在权限上进行了限制
在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件包。有点类似于目录。 在Java中也引入了包,包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。
如果需要使用 java.util 中的其他类, 可以使用 import java.util.* 比如前面我们学习数组时使用 Arrays.toString(arr);时要导入import java.util.Arrays; 建议显式的指定要导入的类名. 否则还是容易出现冲突的情况.比如:

正确的写法:

可以使用import static导入包中静态的方法和字段。(了解即可,不建议使用)
【基本规则】



static修饰的成员变量,称为静态成员变量,静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共享的。
比如说在一个班中,同学1和同学2等都是在一个班的,虽然他们的个人信息不同 但是属于同一个班,对于班级,我们就可以设置为static成员,其位置在方法区。
【静态成员变量特性】
那static属性应该如何访问呢? Java中,被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的。



【静态方法特性】
静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化。
使用 {} 定义的一段代码称为代码块。 普通代码块 构造块 静态块
普通代码块:定义在方法中的代码块

构造块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。

使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量。
当三种代码块一起出现时,静态代码块会最先运行,且只运行一次,与对象是否创建无关。
先运行静态代码块再运行实例代码块,再构造方法。静态代码块会最先运行,且只运行一次
**当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好使用内部类。**在 Java 中,可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类。内部类也是封装的一种体现。

内部类分为:

即未被static修饰的成员内部类。

1.如何获取 实例内部类的对象

内部类可以无限套,但是不建议!!!
2.实例内部类当中不能有静态的成员变量,非要定义,那么只能是被static final 修饰的

成员函数的执行需要外部类对象的引用,static属于类的成员,类加载的时候static就可能会被执行

原因如下: 内部类在类中定义相当于一个成员,必须要先有成员,才能有内部类,而static的执行优先于内部类,因此会发生报错。

why? 加上final之后就说明是常量是10,在编译之后就确定了。 final是常量的意思。

常量是在程序编译的时候确定的,一旦初始化,就不能进行修改了。

3.在实例内部类当中,如何访问外部类当中,相同的成员变量? 如果想在内部类中使用外部类的data1,则修改代码: 类名.this.外部类成员 即可

【注意事项】
被static修饰的内部成员类称为静态内部类。
OuterClass2.InnerClass2 innerClass2 = new OuterClass2.InnerClass2(); OuterClass2 outerClass = new OuterClass2();
System.out.println(outerClass.data1);定义在外部类的方法体或者{}中,该种内部类只能在其定义的位置使用 【注意事项】






生成一个这样的:toString


帮助你检查重新的的对不对,即注解。