05.面向对象,封装,static final

倖福魔咒の 提交于 2020-02-15 22:12:44

面向对象

面向对象首先是一种思维方式的体现,其特点就是分工化操作,将功能封装起来,达到运用对象处理事务的目的。
面向对象在JAVA中的体现:
封装,继承,多态 ,组合

类与对象的关系

在JAVA中万物皆是对象,每个对象都应该是独一无二的,是一种类实例化的体现,我们将对象分类,就变成了类,类是一类对象的共性。
类:具有一定的属性,和共同特性的集合。是对对象共性的抽离。
对象:是对类模板的具体实例化。
方法:面对过过程的体现,实现功能的语句。
定义一个类:抽离对象共性,属性就是成员变量,成员方法就是能力。
创建对象: 格式  new 构造器名( [实参] ); 
                   构造器名==类名 
                匿名类对象,在使用的时候,可以不进行赋值,直接链式编程  new Person("张三",18).tell(); 使用一次就会成为垃圾。
                   格式 : xx类 变量 = new xx类名 ([实参]); 构建对象并接收对象;
                   类是对象的类型 , 对象是类的实例,一个类可以创建N多个对象;
小问题:如果一个不同包下有同名的类,请使用包名加类名调用,不同包先导包。包名加类名是唯一身份标识.

封装

封装:封装是为了防止,类中数据被外界访问,被篡改。提高程序的安全性,隐藏内部“细节”,提供对外操作的“接口”。对内部数据进行保护的同时 , 还可以自定义设置对象属性值。
首先如何封装一个标准类,类是多个具有同样属性的聚合。
1:尝试定义一个模板,这个模板应该具有一类对象的共性,模板是对一类对象的特性抽离,当归纳成类以后尝试用代码去实现共性,从而定义一个类。
2:当类创建完毕以后,这个类就具有了包含此类对象的属性,这样我们就可以使用类模板去产生对象,对象可以是无数个,也可以各式各样。
如何合理的封装一个标准类,一个标准类应该包含什么。

1:属性

  1. 合适的类型,合适的名字,驼峰,
  2. 属性私有化,private,让本类可以访问,别的类使用公共的设定器,访问器来访问,和设定。
  3. 只声明不赋值,除非是共有的static属性。尽量在对象实例化时候才进行赋值。

2:构造器 注意系统赠送问题

构造器的名字始终和类名相同,它的作用是让一个新的对象产生的操作,是一种构造的过程,
修饰符类名(行参列表){};构造方法是一个特殊的方法,不需要返回值,也不用返回值类型。
new关键字就是构造方法的一种实现,每个定义类都会默认给一个无参构造器,但是如果我们自己定义了有参构造器,系统不会再给你无参构造器,同时用new调用无参构造器,也会报错。
1.一个类肯定会有构造方法,
2.构造方法为啥不用void,因为定义了void就和普通方法一样了,构造方法是实例化对象用的,普通方法是实例化对象后用的。所以不行,
public Hello(){}
3.构造方法重载,考虑参数的,个数,类型,顺序不重要,原因在于,无论怎样赋值都是这些属性,但是顺序不同不报错,只不过输入时候要按照定义过的构造顺序赋值

3:设定器

设定器的作用是让外界可以用公共的设定器去改变对象的属性,从而达到修改的目的
构造方法赋值和getter setter方法赋值的区别,首先构造方法是在对象实例化时进行的赋值,setter方法是有了对象后赋值,修改时候不改变其指向还是本类对象。
public void set属性名(属性类型;属性名字){ this.属性名字=属性名字

4:访问器 getter setter 方法的序列化,boolean类型是getter名称是is。所以对象名字别加is,有些框架会出现问题.

访问器的作用是让外界有公共的访问属性的功能.
构成
public 属性类型 get 属性名字(){this.属性名字|| return 属性名字}

5:功能方法

用代码具体实现的功能方法。任何类方法都会有一个默认的几个方法,因为所有的类都继承于Object类,
我们要根据实际需求,重写Object方法。

Static 关键字 (公共!)本身就不是最优选择,一定要在公共属性和回避实例化对象赋值时才用。

四大特性 : 1.优先加载.2.一旦加载永存3.不依附对象4.加载一次
静态的,静态修饰,静态的作用是优先加载,并且只加载一次,一次加载一直存在。对象共享的数据。一旦更改后面创建的对象都会随之改变。
Static修饰成员变量:可以变成计数器,使类属性自动增长。不与对象有关系。公共属性可以使用对象和类名称点来调用
static int count =2019;
int ID= count++;
这种方法就要,不给set  id    而且构造器不能有id的

            访问静态属性时有两种方式 

              1. 类名.静态属性名 (推荐) 
              2. 对象.静态属性名 (不推荐)



Static修饰成员方法:静态方法不依附于对象,是属于类的。本类中的静态方法可以直接使用。不用类名点调用。但是编译期间会自动编译,是等效的。静态方法只能调用用静态属性和方法。非静态可以使用静态的。因为不依附于对象。



Static修饰代码块:Static{  }  执行本类时候,只执行一次,在最开始加载。静态代码块比构造方法先执行,多个对象创建也执行一次。用途:一次性的为静态成员变量赋值。

静态方法和变量不能直接调用非静态的方法变量。因为静态的优先加载,永久存在,不依附于对象。同样也不能调用this.原因同上。

构造块(代码块)比构造器早,

final 关键字

    final 意为最终的不变的 , 在java中它是修饰符 , 它修饰的成员都是最终的不变的 。

    作用 : 

        1. 修饰类 最终的类,无法再派生子类 ; (断子绝孙)
                 该类无法被继承 例如 String
                 
        2. 修饰方法 最终的方法(无法重写)
                 该方法无法被重写 
                 
        3. 修饰属性(成员变量)     
                 final 修饰基本数据类型属性 , 其值永不可变    
                 final 修饰引用数据类型属性 ,其引用地址永不可变 , 但是地址指向的对象本身可变 
            
                final 修饰的属性必须在声明时就赋值
                否则 , 必须在每个构造器中 都对其进行赋值 
                一定要保证 final 修饰的属性 在对象创建之后必定有值 , 并且只有一个值 ; 

        4. 修饰局部变量
                只要值确定了 那么值永不可变 也叫做常量
                        final 修饰基本数据类型变量 , 其值永不可变
                        final 修饰引用数据类型变量 , 其引用地址永不可变 , 但是地址指向的对象本身可变 .
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!