《初学JavaSE》第三讲:包、类和对象、封装 一、包包是Java中一个组织类的方式用于防止类名冲突和提高代码的可读性。包允许将类组织在一个层次结构中类似于文件系统的目录1.包的创建1.1 IDEA系统自带的包当我们输入一个关键字时并且按下回车键系统就会导入该关键字的包java.util 表示的是包Scanner 表示包中的类1.2 使用IDEA自定义构造包1包的构建点击src - 点击New - Package填写包名时采用全小写的方式小驼峰2在包中构建类点击包名 - 点击New - Java Class填写类名时采用首字母大写的方式大驼峰2.包访问权限包访问权限是默认访问权限根据创建类时有无public来区分1有public有public表示在任何包中都可使用该包中的类2无public无public表示只能在该包中使用其他的包无法导入该包和里面的类二、类1.类的定义和创建1.1 类的定义类是模版、抽象蓝图描述一类事物共有属性和行为并且类是对象的模版1.2 类的创建1语法形式(public) class 类名{ //成员变量属性 //成员方法行为 }类名命名时首字母大写大驼峰成员变量描述类的它的位置在类的里面成员方法的外面分为非静态成员变量和静态成员变量成员方法说明类的功能分为非静态成员方法和静态成员方法2非静态的成员变量和成员方法2静态成员变量和方法用static修饰的成员变量和方法就称为是静态的2.类的实例化非静态的当定义一个类相当于在计算机中定义了一个新的类型与int、double类型属于Java自带的内置类型而类是用户自己定义了一个新的类型如上述实例中Student用类类型创建对象的过程称为类的实例化在Java中采用new关键字配合类名来实例化对象new可以实例化多个对象2.1 语法形式类名 变量名 new 类名();1new实例化多个对象2.2 访问对象的成员当我们实例化对象之后new 类名()会在堆中开辟空间来存储成员变量名则充当一个引用变量存在栈中存对象在堆里的地址值。访问对象的成员对象的引用 点号 访问成员的名字3 对象的初始化3.1 默认初始值之前我们在创建局部变量时不给变量初始化一个值系统就会发生报错但在上述实例中用户没有给变量初始化系统也没有报错原因则是在我们实例化对象时new 自动给所有成员变量赋予默认初始值那么不同类型的成员变量的默认初始值是多少呢?1元素为基本类型的默认值类型默认值byte0short0int0long0Float0.0fdouble0char/u0000boolenFALSE2元素为引用类型元素为引用类型的数组其默认值是null3.2 就地初始化在声明变量时就直接给出了初始值3.3 构造方法初始化构造方法中提到4.this关键字我们通过一个疑问来引出this这个关键字当形参名和成员变量名相同时会发生什么呢这是我们会发现打印的内容与我们传参的数据是不同的原因是当我们实参传给形参时形参相当于是局部变量根据就近原则我们的成员变量也被赋予成局部变量因此当两个局部变量互相赋值时打印的呢就是默认初始值4.1 this的作用this引用 指向当前对象在成员方法中所有成员变量的操作都是通过该引用去访问1this访问成员变量2this调用成员方法4this调用构造方法构造方法中提到5.对象的构造和重载5.1 构造方法初始化1语法形式public 类名(参数列表){ //成员变量 }类名与创建类的名字必须一样并且是在类中构造参数列表实参与形参必须都一样没有实参就不写参数不能在括号里加void注没有返回值设置void也不行构造方法可以重载如图2无参初始化当我们实例化一个类时但并没有构造一个方法我们会发现系统并没有报错原因是系统会默认一个构造方法是无参数类型的担当我们自己构造了方法系统默认的就会被销毁。如图5.2 构造方法的重载重载必须遵循量大条件类名相同参数列表不同参数个数、参数类型、参数顺序5.3 this 调用构造方法1执行顺序2this调用的限制this(…)必须写在第一行不能形成环的调用6.对象的打印我们直接打印对象的引用打印结果为类路径名对象的hashcode值6.1 那么怎么直接打印对象呢答案是重写toSpring方法即可从这张图中我们可以看到最后打印出来对象的值对应的方法是toString类型那我们重写一遍返回的值就是我们的对象1手动打印2利用IDEA系统打印操作的结果7.staticstatic可以修饰成员变量和成员方法被static修饰的成员称之为静态成员类成员其不属于某个具体的对象是所有对象共享的7.1 static 修饰成员变量1访问成员变量对象的引用 点号 静态成员变量名类名 点号 静态成员变量名优先使用7.2 static修饰成员方法1修饰成员方法的限制1静态成员方法里不能有非静态成员变量和方法2静态成员方法里不能出现thisthis表示对当前对象的引用3静态方法中不能调用任何非静态方法因为非静态方法有this参数在静态方法中调用时候无法传递this引用2访问成员方法类名 点号 静态成员方法名7.3 静态变量的初始化静态变量的初始化分为就地初始化和静态代码块初始化1就地初始化在声明静态变量时就直接给出了初始值2静态代码块初始化代码块中提到8.代码块使用{}定义的一段代码称为代码块根据代码块定义的位置以及关键字代码块分为普通代码块、示例代码块、静态代码块、同步代码块后期讲解8.1 普通代码块定义在方法中的代码块8.2 实例代码块构造代码块定义在类中的代码块不加修饰符只有在创建对象时才会被执行1示例代码块与构造方法的执行顺序示例代码块的执行顺序的优先级高于构造方法的代码块8.3 静态代码块使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量1静态代码块的与其他两个代码快的执行顺序静态代码块的执行顺序是最先执行的其次是示例代码块最后是构造方法2静态代码块的限制不管创建多少个对象静态代码块只会被执行一次三、封装封装将属性私有化对外提供公共访问方法1.访问限定符private用访问限定符(private)修饰成员变量和成员方法就可达到封装的效果1.1 private 代码格式1.1 private的作用类中被private修饰的成员变量和成员方法只能在当前类中使用如果要在其他类中使用则需要提供get 和 set 方法作为公开的接口来进行访问1get 和 set方法手动设置get 方法直接打印对象set 方法可以修改private对象的变量再用get 方法打印2利用IDEA系统设置