类和对象(Java)
一.简单认识类Java是一门面对对象的编程语言而类呢简单来理解其实就是一种对对象的描述是一种自定义类型以学生类为例子来说类中可能就包含了学生姓名、年龄、成绩等特征通过类我们就可以创建一个个具有这些特征的学生对象。二.类的定义与使用我们想要创建一个类首先就要用到一个关键字class类中可以创建可以描述对象的变量和方法如以下代码所示class Dog{ public String name; public int age; public void bark(){ System.out.println(this.name汪汪汪); } }像这样我们就简单地定义了一个dog类里面含有能描述dog对象的姓名、年龄、狗叫等信息。创建完狗这个类之后我们就可以用这个类去创建对象啦Dog dognew Dog();像这样我们就创建了一个对象里面包含了类中所有定义地成员变量和方法。创建对象的过程也叫做类的实例化。三.this关键字为了防止混淆Java中提供了this关键字来帮助我们提高代码的清晰度避免变量名相同等导致代码显得混乱。this介绍1. this的类型对应类类型引用即哪个对象调用就是哪个对象的引用类型2. this只能在成员方法中使用3. 在成员方法中this只能引用当前对象不能再引用其他对象4. this是“成员方法”第一个隐藏的参数编译器会自动传递在成员方法执行时编译器会负责将调用成员方法 对象的引用传递给该成员方法this负责来接收四.对象的初始化我们在用类去创建对象时我们往往希望能够初始化对象中的成员变量在这时Java就提供了相应的解决方案构造方法。构造方法介绍构造方法是一种特殊的成员方法方法名字必须与类名相同没有返回值在创建对象时由编译器自动调用并且在整个对象的生命周期内只调用一次。还是以dog类为例其构造方法可以写成public Dog(String name,int age){ this.namename; this.ageage; }有了构造方法我们就可以在创建对象时直接传入所对应的参数在创建对象的同时对对象进行初始化如下所示Dog dognew Dog(xiaohuan,3);同时构造方法也可以构成重载同时存在多个构造方法看具体构造时调用哪个就使用那个。如果不定义构造方法的话Java会默认提供一个空的构造方法而成员变量则会默认初始化为其基本类型所对应的0值。五.封装Java作为一门面对对象的编程语言其有三个特性封装、继承、多态。在本文我们先谈谈封装。封装简单来说就是是套壳屏蔽细节只留下一些接口给外部进行访问。那么我们要如何实现封装呢首先我们要先认识封装要用到的访问限定修饰符访问限定修饰符Java中给出了四种访问限定修饰符public、protected、default、private访问权限由大到小对应的访问权限public公开的属性都可以访问protected除了在不同包内的非子类中不可以使用外其他情况都可以使用default只可以在同一个包内使用同不同类都可用private私有的属性只可以在同一个包中的同一类使用六.包的概念简介Java中为了更好的管理类把多个类收集在一起成为一组称为包。我们可以简单地将包理解为一个文件夹里面存放着一个个类。在不同的包中支持同名的类的出现。如何在一个包中去导入一个其他包中的类很简单我们只需要用到一个import关键字形如import.包名.类名即可package com.model;如上述代码所示我们就在当前包中成功导入了com包中的mode1类啦七.static修饰的静态成员简介被static修饰的成员是属于类本身的称之为静态成员也可以称为类成员其不属于某个具体的对 象是所有对象所共享的。1.static修饰的成员变量特性static修饰的成员变量称为静态成员变量1. 不属于某个具体的对象是类的属性所有对象共享的不存储在某个对象的空间中2. 既可以通过对象访问也可以通过类名访问但一般更推荐使用类名访问3. 类变量存储在方法区当中4. 生命周期伴随类的一生(即随类的加载而创建随类的卸载而销毁2.static修饰的成员方法static修饰的成员方法成为静态成员方法特性1. 不属于某个具体的对象是类方法2. 可以通过对象调用也可以通过类名.静态方法名(...)方式调用更推荐使用后者3. 不能在静态方法中访问任何非静态成员变量4. 静态方法中不能调用任何非静态方法因为非静态方法有this参数在静态方法中调用时候无法传递this引用简单理解静态方法和非静态方法的关系静态方法不依赖对象存在而非静态依赖于对象存在即在使用静态方法时不一定存在对象而使用非静态方法时一定存在对象所以静态方法中不可以使用非静态方法不知道调用静态方法时是否存在对象而非静态方法中可以使用静态方法静态方法一直存在。八.代码块使用{}定义的一段代码称为代码块。根据代码块定义的位置以及关键字又可分为以下四种1.普通代码块 2.构造代码块 3.静态代码块 4.同步代码块本文暂不介绍1.普通代码块普通代码块是定义在方法中的代码块直接用{}包括起来,如下代码演示public void setName(String s) { public String names; }2.构造代码块构造代码块是定义在类中的代码块也可以称作实例代码块一般用来初始化实例成员变量如下述代码以初始化学生对象演示使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量如代码中Student类中的{}中的内容即为构造代码块。3.静态代码块使用static定义的代码块称为静态代码块一般用于初始化静态成员变量class Student{ public static int classroom; static{ classroom1; } }像这样我们就完成了一个静态代码块初始化了classroom这个静态成员变量。九.内部类介绍Java中可以将一个类定义在另一个类的内部称为内部类内部类和外部类共用同一个java源文件但是经过编译之后内部类会形成单独的字节码文件。内部类又可以分为实例内部类、静态内部类、局部内部类和匿名内部类其中实例内部类和静态内部类又可以称为成员内部类1.实例内部类未被static修饰的内部类如下演示public class Student { private String name 张三; private int age 18; // 实例内部类无static修饰 class StudentInfo { public void showInfo() { //可以直接访问外部类成员变量和方法 System.out.println(姓名 name 年龄 age); } }注意事项1. 外部类中的任何成员都可以在实例内部类方法中直接访问2. 实例内部类所处的位置与外部类成员位置相同因此也受public、private等访问限定符的约束3. 在实例内部类方法中访问同名的成员时优先访问自己的如果要访问外部类同名的成员必须外部类名称.this.同名成员 来访问4. 实例内部类对象必须在先有外部类对象前提下才能创建5. 实例内部类的非静态方法中包含了一个指向外部类对象的引用6. 外部类中不能直接访问实例内部类中的成员如果要访问必须先要创建内部类的对象。2.静态内部类被static修饰的内部类public class Student { // 外部类静态属性 private static String school 第一中学; // 外部类非静态属性 private String name 李四; // 静态内部类有static修饰 static class StudentSchool { public void showSchool() { // 可直接访问外部类静态属性 System.out.println(学校 school); //不可以访问外部类的实例属性 System.out.println(姓名 name); //第二条会导致编译报错 } }注意事项1.在静态内部类中只能访问外部类的静态成员2.创建静态内部类对象时不需要先创建外部类对象3.局部内部类定义在外部类的方法体或者{}中该种内部类只能在其定义的位置方法体或者{}内使用一般使用的非常少public class Student { public void showScore() { int score 95; // 局部内部类定义在方法中 class ScoreInfo { public void printScore() { // 可访问方法内的局部变量 System.out.println(成绩 score); } } // 方法内创建局部内部类对象并调用方法 ScoreInfo scoreInfo new ScoreInfo(); scoreInfo.printScore(); }注意事项1. 局部内部类只能在所定义的方法体内部使用2. 不能被public、static等修饰符修饰