面向过程:是一种以过程为中心的编程思想。“面向过程”就是汽车启动是一个事件,汽车到站是另一个事件。在编程序的时候我们关心的是某一个事件。而不是汽车本身。我们分别对启动和到站编写程序。
面向对象:是一种以事物为中心的编程思想。我们关心的是由汽车抽象成的对象,这个对象有自己的属性,像轮胎,颜色等;有自己的方法,像启动,行驶等.方法也就是汽车的行为.而不是汽车的每个事件。
面向对象的三大特性:
封装继承多态对象:是用来描述客观事物的一个实体。例如奥迪车和宝马车,虽然这两个跑车都是对象,但具有不同的特征,比如品牌不同、价格不同、性能不同
类:类是具有形同属性和方法的集合。譬如跑车的特征是都有轮子、门等,这就是跑车这个对象的属性。还有一些共同的行为,比如都能发动、加速等,这就是方法。
面向对象设计的过程就是抽象的过程,一般分3步来完成:
1)发现类,类定义了对象将会拥有的特征(属性)和行为(方法)。
2)发现类的属性,对象所拥有的静态特征在类中表示时称为类的属性
3)发现类的方法,对象执行的操作称为类的方法。
public class Person{ // 定义人类 // 定义类的属性(特征) public String name; // 姓名 public String gender; // 性别 public int age; // 年龄 // 定义类的方法(行为) public void work(){ System.out.println(this.name+"的工作理念:干活挣钱有饭吃"); } }定义类的语法格式:
[访问修饰符] class 类名 { // 一组属性 // 一组行为 }定义狗类:
public class Dog { // 一组属性 String color; // 颜色 String strain; // 品种 String name; // 名称 int age; // 年龄 double weight; // 体重 // 一组行为 public void eat() { System.out.println("狗爱吃骨头!"); } public void shout() { System.out.println("狗吠声!...."); } }创建对象的语法格式:
类名 对象名 = new 类名(); 对象名.属性名 = xxx; // 属性的赋值 对象名.方法名(); // 执行对应的方法创建狗对象:
public class Test { public static void main(String[] args) { // 创建对象 Student dog1= new Student(); // 属性赋值 dog1.name = "二哈"; dog1.age = 8; // 方法调用 dog1.eat(); System.out.println("------------------"); Student dog2= new Student(); // 赋值 dog2.name = "阿毛"; dog2.age = 7; // 方法调用 dog2.shout(); } }【类和对象的关系:】
类是一个抽象的概念。
类是从一组具有相似特征的对象中发现抽取而出的。
对象是类的一个个体/实例
方法:能够实现某种功能的一个东西。变量可以存储我们单一的数据,而方法则可以存储我们的功能代码段。
方法的基本语法:
// 方法声明 [访问修饰符] 返回值类型 方法名([参数列表]){ // 方法体 [return 返回值;] }方法的分类:
1)无参无返方法
2)有参有返方法
3)有参无返方法
4)无参有返方法
public class Person{ public String name; // 姓名 public int age; // 年龄 // 无参无返 public void work(){ System.out.println(this.name+"的工作理念:干活挣钱有饭吃"); } // 有参无返 public void work(String contect){ System.out.println(this.name+"的工作理念:"+contect); } // 有参有返 } // 无参有返 } // 创建work()方法时定义的参数叫形式参数,简称形参 // 调用方法时传入的参数叫做实际参数,简称实参
方法重载:方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数类型和参数个数。
方法重载的特点:
在同一个类中方法名相同参数个数和类型不同方法的返回值不能作为判断方法之间是否构成重载的依据构造方法:创建、构建,类的对象的构建和创建的方法。 当对象创建时都会被执行!
构造方法最重要的意义就是Java给我们提供了能够在对象的创建(生命周期)过程中添加代码的能力。
一般构造方法的应用都是用于一些基本信息的初始化(初始化方法)。
每一个类默认情况下JVM都会分配一个无参构造。
构造方法没有返回值类型,方法名和类名完全相同。
构造方法分为带参方法和无参方法
只要你自己创建任意一个构造方法,那么JVM就不再给你分配无参构造了。所以建议无论自己是否编写构造方法,都去手动编写一个默认的无参构造。
方法重载:发生在一个类中的,方法名相同,参数列表不同(个数、顺序、类型)的情况。与访问修饰符和返回值类型无关。
方法重载的意义在于我们要定义相同功能的方法,不需要再花费大量时间去定义n种方法名,而且未来在调用时体验更佳。
封装:类和对象章节 当时学到的是半成品的封装。学会发现类,发现类的属性、类的行为。
另外一半的封装概念:将一些不安全的信息进行封装(保护),然后将可以直接被我们使用的部分开放出来(接口)。(提升安全性和可用性,有面向接口编程的思想)
使用步骤: 未来这些类组件都应该采用封装来进行信息保护
属性私有化(private)
提供公共的getter(getXX())和setter(setXX())方法
根据需求在setter和getter方法中添加逻辑判断
JavaBean:其实指的就是我们那些对象类。
属性私有化
提供公共的getter和setter方法
提供无参构造
实现序列化接口(序列化其实就是我们的对象在流之间进行转换的一种概念)
我们未来开发的系统应该非常接近于 高内聚、松耦合(低耦合)。
1. 便于使用者正确使用系统,防止错误修改属性。简单说就是安全 前面属性的例子 自动提款机(钱放在那里,用户自己存钱取钱 自己改存折上的数据不行 取款机要点钱)
2. 有助于系统之间的松耦合(低耦合),提高系统独立性。当某一个系统的实现发生变化时,只要它的接口不变,就不会影响其他的系统,例如:我修改了属性名,如果没有封装,我需要修改程序中不同类n处使用到这属性名的地方,而用了封装,我只需要修改好当前这个类里面向外部提供的方法(接口API)就可以了,因为外部只是在使用我这个方法名而已。
3. 提高软件的可重用性。每个系统都是一个相对独立的整体,可以再多种环境中得到重用。如干电池在相机、手电筒、剃须刀都能使用。
4. 降低了构建大型系统的风险。即使整个系统不成功,个别的独立子系统有可能依然有价值,比如相机损坏了,但电池依然有用,可以安装在手电筒中。
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
包的作用
1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
包语句的语法格式为:
package pkg1[.pkg2[.pkg3…]];
访问修饰符:在类的语法和方法的语法上,访问修饰符不仅可以修饰属性、也可以修饰方法、还可以修饰类。
private[package/default] 当你不写访问修饰符时 代表的就是包级别的访问protectedpublic同一类中
同一包中
子类中
其他地方
private
√默认修饰符
√ √protected
√ √ √public
√ √ √ √