面向对象的三大特性
封装
继承
多态
1. 掌握封装的使用
封装的作用
封装 类和对象章节 当时学到的是半成品的封装 当时学会发现类 发现类的属性 类的行为
另一半的概念 将一些不安全的信息进行封装(保护) 然后将可以直接被我们使用的部分开放出来(接口) (提升安全性和可用性 右面相关接口编程的思想)
使用步骤 未来这些类的组件都应该采用封装来进行信息保护
属性私有化 (private)
提供公共的getter(getXX())和setter(setXX() )方法
根据需求在setter和getter方法中添加逻辑判断
一般JavaBean的规范
JavaBean 其实就是之我们那些对象类
属性私有化
提供无参构造
提供公共的getter和setter方法
实现序列化接口(序列化其实就是我们的对象在流之间进行转换的一种概念)
public class Dog implements Serializable{
// 序列化ID
private static final long serialVersionUID = 1L;
private String name;
// 快捷键:Alt+Shit+S -> r
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 快捷键:Alt+Shit+S -> c 生成无参
public Dog() {
}
// 快捷键:Alt+Shit+S -> o 生成带参
public Dog(String name) {
this.name = name;
}
}
封装的优势
我们未来开发的系统应该非常接近于 高内聚 松耦合(低耦合)
摘取北大青鸟查老师的
1. 便于使用者正确使用系统,防止错误修改属性。简单说就是安全 前面属性的例子 自动提款机(钱放在那里,用户自己存钱取钱 自己改存折上的数据不行 取款机要点钱)
2. 有助于系统之间的松耦合(低耦合),提高系统独立性。当某一个系统的实现发生变化时,只要它的接口不变,就不会影响其他的系统,例如:我修改了属性名,如果没有封装,我需要修改程序中不同类n处使用到这属性名的地方,而用了封装,我只需要修改好当前这个类里面向外部提供的方法(接口API)就可以了,因为外部只是在使用我这个方法名而已。
3.提高软件的可重用性 每个系统都是一个相对独立的整体,可以再多种环境中得到重用。如干电池在相机、手电筒、剃须刀都能使用。
4. 降低了构建大型系统的风险。即使整个系统不成功,个别的独立子系统有可能依然有价值,比如相机损坏了,但电池依然有用,可以安装在手电筒中。
2. 掌握包组织结构
2.1包的作用
package 从第二章节就开始创建了
它的作用就是用于对源代码进行分包管理 方便我们开发和阅读 另外也在一定程度上解决了同一个文件夹下无法出现同文件名
规范 要求包名全部小写
公司域名的倒序 + 应用程序名 +[部门名称]+[功能模块]
课工场:www.kgc.cn -> cn.kgc
腾讯:www.tencent.com -> com.tencent.xx
阿里巴巴:www.alibaba.com -> com.alibaba.xxx
开发的:Tim:com.tencent.tim.xxx
Android应用 将包作为了一种区分不同应用程序的一个要素
另外还依靠于签名
2.2 导包
在我们使用类的时候 (一个类使用另一个类)
如果是在同一个包中使用某个类 那么直接可以进行使用
如果是在不同的包中使用某个类 必须先进行导包(import)
如果使用的是Java.lang包下的内容的话 不需要导包 例如 System Math…(这是JVM自动导入)
例如:
import java.util.Scanner; // 导包 因为不在一个包中 JVM也不知道从哪去找你要的这个类
public class Test{
public void method(){
Scanner input = new Scanner();
input.nextInt();
}
}
包声明语法(必须出现在文件中的第一行有效代码) package 包地址;
导包的语法(必须出现在类声明上方 包生命下方) import 类的权限名/全类名; 例如 java.util.Scanner;
如果与要用到java.util包中的很多内容 那麽可以直接 import java.util.*;
快捷键 Ctrl+Shigt+o
3. 掌握Java中的访问权限修饰符[访问级别]
访问修饰符 在类的语法和方法的语法上
访问修饰符不仅可以修饰属性 也可以修饰方法 还可以修饰类
-
private
-
[package/default]
当你不写访问修饰符时 代表的就是包级别的访问 -
protected
-
public
作用域 修饰符 | 同一个类中 | 同一个包中 | 子类中 | 任何地方(同一个项目) |
---|---|---|---|---|
private | √ | |||
默认修饰符 | √ | √ | ||
protected(了解) | √ | √ | √ | |
public | √ | √ | √ | √ |
在一个类文件中 被public修饰的类的名称必须和文件名相同
一般情况下不会在一个类文件中定义多个类
public class Person {
private String name;
int age;
public double weight;
protected String gender;
public void method1() {
System.out.println(name);
System.out.println(age);
System.out.println(weight);
}
}
class HeHe{
}
class HoHo{
}
4. 掌握static关键字[有难度]
static 如果被它修饰的方法 在调用非static修饰的方法时 必须先创建对象才能使用
static表示静态的被它修饰的信息要和JVM运行时数据区-方法区打交道
它可以修饰
类
属性 类属性/类变量/静态变量 可以通过类名直接调用
方法 类方法/静态方法 可以通过类名直接调用
代码块 静态代码块
为了在某种时机下执行的一段代码而已
静态代码块只执行一次 在类加载的时候执行
构造代码块会随着对象创建而执行 优先于构造方法执行
public class Dog {
public Dog(){
System.out.println(“构造方法执行了!”);
}
// 代码块/成员代码块/构造代码块/非静态代码块
{
System.out.println(“构造代码块执行了!”);
}
// 静态代码块
static {
System.out.println(“静态代码块执行了!”);
}
}
public class Test{
public static void main(String[] args){
Test test = new Test();
test.method1();
}
public void method1(){
}
}
注意事项
static修饰的信息都是属于类的信息 他们会随着类的加载而进行初始化
int num;
public static void method1(){
sout(num); // (X) 同下
// method2(); // (X) 因为当method1()加载时 method2还未初始化 所以我们才会先创建对象再去使用
}
public void method2(){
method1(); // method1已经在类加载的时候 加载完了 所以可以正常使用
}
static修饰的信息是可以被类的所有对象共享的