一、类定义和使用在java中定义类时需要用到class关键字具体语法如下classClassName{field;//字段(属性)或者 成员变量method;//行为 或者 成员方法}class为定义类的关键字ClassName为类的名字{}中为类的主体。例如定义一个学生类class Student{ public String name; public String gender; public short age; public double score; public void DoClass(){} public void DoHomework(){} public void Exam(){} }注意一般一个文件当中只定义一个类main方法所在的类一般要使用public修饰public修饰的类必须要和文件名相同二、类的实例化用类类型创建对象的过程称为类的实例化在java中采用new关键字配合类名来实例化对象。public class Test { public static void main(String[] args) { Student student1 new Student(); student1.age 18; student1.gender 男; student1.name zhangsan; student1.score 3.1415926; } }注意new关键字用于创建一个对象的实例使用.来访问对象中的属性和方法同一个类可以创建多个实例三、this引用this引用指向当前对象(成员方法运行时调用该成员方法的对象)在成员方法中所有成员变量的操作都是通过该引用去访问。public class Date { public int year; public int month; public int day; public void setDay(int year, int month, int day){ this.year year; this.month month; this.day day; } public void printDate(){ System.out.println(this.year / this.month / this.day); } }this引用的是调用成员方法的对象其特性this的类型对应类类型引用即哪个对象调用就是哪个对象的引用类型this只能在成员方法中使用在成员方法中this只能引用当前对象不能再引用其他对象this是“成员方法”第一个隐藏的参数编译器会自动传递在成员方法执行时编译器会负责将调用成员方法对象的引用传递给该成员方法this负责来接收四、对象的构造及初始化构造方法(也称为构造器)是一个特殊的成员方法名字必须与类名相同在创建对象时由编译器自动调用并且在整个对象的生命周期内只调用一次。public class Date { public int year; public int month; public int day; // 构造方法 // 名字与类名相同没有返回值类型设置为void也不行 // 一般情况下使用public修饰 // 在创建对象时由编译器自动调用并且在对象的生命周期内只调用一次 public Date(int year, int month, int day){ this.year year; this.month month; this.day day; System.out.println(Date(int,int,int)方法被调用了); } }构造方法的作用就是对对象中的成员进行初始化并不负责给对象开辟空间构造方法名字必须与类名相同没有返回值类型设置为void也不行创建对象时由编译器自动调用并且在对象的生命周期内只调用一次构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)如果用户没有显式定义编译器会生成一份默认的构造方法默认构造方法一定是无参的一旦用户定义编译器则不再生成可以通过this 调用其他构造方法来简化代码public Date(){ //无参构造方法中调用带有三个参数的构造方法 this(1900, 1, 1); //this.year 1900; //this.month 1; //this.day 1; } // 带有三个参数的构造方法 public Date(int year, int month, int day) { this.year year; this.month month; this.day day; }注意this(...)必须是构造方法中第一条语句关于变量的初始化我们知道局部变量在使用时必须要初始化而成员变量似乎并没有初始化仍然可以使用这是因为实际上在创建对象的时候对象的空间被分配好以后对象中包含的成员已经设置好了默认初始值五、封装面向对象程序三大特性封装、继承、多态。而类和对象阶段主要研究的就是封装特性。封装即将数据和操作数据的方法进行有机结合隐藏对象的属性和实现细节仅对外公开接口来和对象进行交互5.1访问限定符Java中主要通过类和访问权限来实现封装类可以将数据以及封装数据的方法结合在一起更符合人类对事物的认知而访问权限用来控制方法或者字段能否直接在类外使用。范围privatedefaultprotectedpubilc1同一包中的同一类√√√√2同一包中的不同类√√√3不同包中的子类√√4不同包中的非子类√5.2包在面向对象体系中提出了一个软件包的概念即为了更好的管理类把多个类收集在一起成为一组称为软件包。在Java中也引入了包包是对类、接口等的封装机制的体现是一种对类或者接口等的很好的组织方式比如一个包中的类不想被其他包中的类使用。包还有一个重要的作用在同一个工程中允许存在相同名称的类只要处在不同的包中即可。Java提供了很多现成的类供我们使用比如可以使用importjava.util.Date;来导入java.util包中的Date类若需要使用java.util包中的其他类可以使用importjava.util.*但是更建议使用显式的指定要导入的类名.还可以使用import static导入包中静态的方法和字段import staticjava.lang.Math.*;除了Java提供的包以外还可以自定义包基本规则如下在文件的最上方加上一个package语句指定该代码在哪个包中.包名要尽量指定成唯一的名字包名要和代码路径相匹配如创建adress1.adress2.demo的包则存在一个对应的路径adress1/adress2/demo来存储代码如果一个类没有package语句则该类会被放到一个默认包中六、static成员在Java中被static修饰的成员称之为静态成员也可以称为类成员其不属于某个具体的对 象是所有对象所共享的。static修饰的成员变量称为静态成员变量其特性如下不属于某个具体的对象是类的属性所有对象共享不存储在某个对象的空间中既可以通过对象访问也可以通过类名访问更推荐使用类名访问类变量存储在方法区中生命周期伴随类的一生随类的加载而创建随类的卸载而销毁通过就地初始化或者静态代码块初始化static修饰的成员方法成为静态成员方法是类的方法不是某个具体的对象所特有的方法。静态成员变量一般通过静态方法来访问的。与静态成员变量类似静态方法不属于某个具体的对象是类方法既可以通过对象访问也可以通过类名访问更推荐使用类名访问不能在静态方法中访问任何非静态成员变量不能在静态方法中调用任何非静态方法因为非静态方法有this参数public class Student{ public static String classroom 20210815; private static String school UESTC; public static String getSchool(){ return school; } } public class Test_demo1 { public static void main(String[] args) { System.out.println(Student.classroom);//通过类名访问 Student student1 new Student(); System.out.println(student1.classroom);//通过对象访问 //System.out.println(Student.school);//私有属性无法直接访问但是可以通过静态方法来访问 System.out.println(Student.getSchool()); } }七、代码块使用{ }定义的一段代码称为代码块。根据定义的位置和关键字可分为普通代码、构造实例代码块、静态代码块和同步代码块。普通代码块定义在方法中用法较少。构造代码块又称实例代码块定义在类中不加修饰符方法的外面一般用于初始化实例成员变量。使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量。注意静态代码块只会执行一次静态成员变量是类的属性因此是在JVM加载类时开辟空间并初始化的如果一个类中包含多个静态代码块在编译代码时编译器会按照定义的先后次序依次执行合并实例代码块只有创建对象时才会执行初始化的顺序为静态代码块只执行一次-实例代码块-构造方法class Person{ private String name; private int age; private String sex; private static String school; static { school UESTC; System.out.println(静态代码块执行了); } { name hyhyhy; age 30; sex nan; System.out.println(实例代码块执行了); System.out.println(this.sex - this.name - this.age); } Person(int age, String name, String sex){ this.age age; this.name name; this.sex sex; System.out.println(三个参数的构造方法执行了); } public void printPerson(){ System.out.println(this.name - this.age - this.sex); } } public class Test_demo1 { public static void main(String[] args) { //代码块的种类和执行顺序 Person person1 new Person(10,zhangsan,nan); person1.printPerson(); Person person2 new Person(20,lisi,nv); person2.printPerson(); } }