类和对象(二)

📅 2026/7/19 16:15:07
类和对象(二)
一.包是什么1.定义是Java中一个组织类的方式由于防止类名冲突和提高代码的可读性可以理解为文件夹2.导入包中的类import java.util.Date;也可以import java.util.*;3.自定义包规则在文件的最上方添加一个package语句指定该代码在那个包中若一个类没有package语句该类 就被放在默认包中创建在IDEA中新建通过包src右键-新建-包4.包的访问权限如果我们在定义有一个类的时候没有指定成员变量/方法的访问权限此时默认的访问权限就是包访问权限而包的访问权限就是在同包的子类和非子类都能访问但是包外的都禁止访问二.封装1.概念面向对象程序的三大特性封装继承多态但是在类和对象中我们先只说封装封装将数据和操纵数据的方法进行有机结合类似于放在一个类中隐藏对象的属性和细节仅对外公开接口和对象经行交互代码实现public class Student { private String name 张三; private int age 20; public void eat(String name){ System.out.println(name吃好吃的); } public String getName() { return name; } public void setName(String name) { this.name name; } } class Test{ public static void main(String[] args) { Student stu new Student(); stu.eat(王五); System.out.println(stu.getName()); stu.setName(李四); System.out.println(stu.getName()); } }因为使用了private修饰后Test就无法通过Person引用来访问数据所以这个封装就起到了作用若想访问那么我们就可以通过get和set方法作为公开的接口来访问封装的好处降低代码的耦合性当对象内部变化时改变对象内部就可以了降低代码复杂性提高安全性2.访问限定符privatedeflautprotectedpublic同一包同一个类YYYY同一包不同类YYY不同包中子类YY不同包中非子类Y三.static关键字1.静态成员变量定义被static修饰的成员变量称为静态成员变量是类的属性特性不属于某个具体对象是类的属性是全所有对象共享的既可以用对象访问也可以用类名访问类变量储存在方法区中生命周期伴随类的一生public class S { public static int a 1; } class X{ public static void main(String[] args){ System.out.println(S.a); S s1 new S(); System.out.println(s1.a); } }2.静态成员方法定义被static修饰的成员方法称为静态成员方法是类的方法特性不属于某个具体的对象是类的方法可以通过对象调用也可以通过类名.静态成员方法名(...)调用不能在静态方法中访问任何非静态成员变量public class S { public static int a 1; int age 20; public static int sum(){ age1; return a; } } //无法从静态上下文中引用非静态 变量 age静态方法中不能调用任何非静态方法非静态方法中有this参数在静态方法中调用时无法传递this引用public class S { public static int a 1; int age 20; public static int sum1(){ sum2(); return a; } public int sum2(){ return aage; } } //java: 无法从静态上下文中引用非静态 方法 sum2()3.成员变量初始化就地初始化在定义时给出初始值静态代码块初始化在代码块说四.代码块1.概念以及分类概念使用{}定义的一段代码分类普通代码块构造代码块静态代码块同步代码块2.普通代码块定义在方法中的一段代码块public class Main { public static void main(String[] args){ { int a 1; System.out.println(a); } int a 9; System.out.println(a); } }3.构造代码块定义在类中的代码块又称实例代码块一般用于初始化实例成员变量public class Student { private String name ; private int age ; public Student(){ System.out.println(构造方法被调用了); } { this.name 张三; this.age 20; System.out.println(实例代码快被调用了); System.out.println(name age); } } class Main1 { public static void main(String[] args) { Student stu new Student(); } } 实例代码快被调用了 张三20 构造方法被调用了由此可见实例代码块优先于构造方法而且若是都为实例变量的定义那么按照先后顺序去执行4.静态代码块使用static定义的代码块一般用于初始化静态成员变量public class Student { private String name ; private int age ; private static int a ; public Student(){ System.out.println(构造方法被调用了); } //实例代码块 { this.name 张三; this.age 20; System.out.println(实例代码快被调用了); System.out.println(name age); } //静态代码块 static{ a 2; System.out.println(静态代码块被执行了); } } class Main1 { public static void main(String[] args) { Student stu1 new Student(); System.out.println(); Student stu2 new Student(); } } 静态代码块被执行了 实例代码快被调用了 张三20 构造方法被调用了 实例代码快被调用了 张三20 构造方法被调用了由此可见静态代码块不论有多少个对象都只会执行一次静态成员变量是类的属性因此是在JVM加载类时开辟空间并初始化的如果⼀个类中包含多个静态代码块在编译代码时编译器会按照定义的先后次序依次执⾏实例代码块只有在创建对象时才会执⾏