Java之面向对象(一)——satatic&final关键字

一  Java面向对象

1.     面向对象和面向过程

C和c++都是一种面向过程的语言,面向过程的核心是算法+数据结构,即用数据结构把数据存储起来,用算法来实现操作数据的具体过程。数据和处理人为的分开,使得数据游离在对象之外,加大了开发难度。因此,面向过程的本质是面向机器,而不是面向问题。

面向对象程序设计是一种思想,它体现了人们思考问题和解决问题的自然思路。他把数据放在第一位,然后再考虑如何操作数据的算法。面向过程强调的是功能行为即操作数据的过程,比如我们往冰箱里存储东西,面向过程是这样想的,打开冰箱了,然后把东西放进去,再关上冰箱,我们就好似是一个执行者。二面向对象则是把冰箱看成一个对象,他具有打开、关闭、存储功能,我们就操作冰箱这些功能,使得我们变成一个指挥冰箱这个对象来做事的指挥者。

面向对象的特点?

A:面向对象:将功能封装进对象,强调了具备了功能的对象。

b:面向对象让问题复杂简单化,从执行者变成指挥者。

c:面向对象更符合人们的思考方式。

D: 面向对象三个特性:封装、继承、多态。

二  类与对象

对象:现实生活中的任何事物都可以看作是一个对象,每一个对象都使用自己属性来描述自己的特征,使用方法来描述自己的行为。

类:是一类事物的统称,如人类、鸟类。类是对现实生活中同一事物的特征和功能进行抽象后形成的。

例如:我是一个对象,我有自己的年龄、性别、出生年月,这些都是我自己所具备的特征,我会说话、会走路、会吃饭,这些都是我们所具备的行为,我就是一个实实在在存在的个体,世界上有老人、有小孩、也有女人,这些就组成了庞大的人类,因此可以说人类是一个从同一事物中抽取出来而形成的类,而我就是这个类的一个实例。

对象的三个特性:

对象行为:可以对对象施加哪些操作。

对象状态:当施加操作时,对象如何响应。

对象标示:如何辨别具有相同行为与状态的不同对象。

1 类变量、成员变量和局部变量

类变量:定义在方法外面的变量,通常用static来修饰。

成员变量:也是定义在方法之外,作用于整个类中,不过没有修饰static,成员变量在堆内存中,依存对象存在

局部变量:定义在方法内部,作用于函数中的语句中。局部变量存在栈内存中

[java] view plain copy
  1. class CalssDemo   
  2. {  
  3.     static String s="我是类变量";  
  4.     String s1="我是成员变量";  
  5.     public void method(){  
  6.        String str="我是局部变量"  
  7.   
  8.   
  9.     }  
  10.     public static void main(String[] args)   
  11.     {  
  12.         System.out.println("Hello World!");  
  13.     }  
  14. }  

2 匿名对象

[java] view plain copy
  1. class CalssDemo1  
  2. {  
  3.       publicstatic void method(CalssDemo1 cd){  
  4.    
  5.       }  
  6.       publicstatic void main(String[] args)  
  7.       {  
  8.            CalssDemo1cd=new CalssDemo1();  
  9.            //匿名对象  
  10.            method(newCalssDemo1() );  
  11.       }  
  12. }  

A:当对对象的方法只调用一次时可以使用匿名对象来完成,比较简洁。

B:如果是调用多次的话必须要给对象起个名字。

C:可以将匿名对象作为实际参数进行传递。

构造函数

特点:

 函数名与类名相同 ,不用定义返回值类型,不可以写runturn语句

作用: 给对象进行初始化。

注意: 默认构造函数的特点,对个构造函数是以重载的形式存在。

 

对象一建立就会调用与之对应的构造函数。构造函数作用与给对象初始化。

细节: 当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。如果定义自己的构造对象则不建立默认的构造函数。

构造函数和一般函数不同

 在写法上不同。

在运行上不同,构造函数一建立就运行,已办方法是对象调用才执行,给对象添加所具备的功能。

一个对象建立,构造函数只运行一次,而一般方法可以被该对象调用多次。

 

什么时候用构造函数?

当分析事物时,该事物具备一些特性或行为,那么将内容定义到构造函数中。

 

构造代码块

作用:给对象进行初始化,对象一建立就运行,而且优于构造函数执行。

构造代码块和构造函数的区别

构造代码块是给所有对象进行统一化初始化。而构造函数时给对应的对象初始化。

4 static 修饰符

(1)作用:是一个修饰符,用于修饰成员变量或成员函数。静态修饰的内容被对象所共享。

 当成员被静态修饰后,就多了一种调用方式,除了被对象调用外,还可以直接被类名调用。写法:类名.静态成员。

 特点;

1. 随着类的加载而加载。也就是说,他随着类的消失而消失。

2.优先于对象存在。

3.被所有对象共享。

(2)实例对象和类对象的区别:

     1.存放位置

          类变量随着类的加载而加载,存放在方法区中。

          实例变量随着对象的建立而存在于堆内存中。

    2.生命周期不同

        类变量生命周期最长,随着类的消失而消失。

        实例对象随着对象的消失而消失。

(3)静态使用注意事项

          静态方法总只能访问静态成员或函数。 

          非静态方法中既可以访问非静态也可以访问静态。

          静态方法中可以定义this,super关键字因为静态优先于对象存在,所以静态方法中不可以出现this。

(4)静态的利弊

        利:对对象的共享数据单独空间存储。节省空间,没有必要每个对象都存储一份。可以被类名直接调用。

        弊: 生命周期过长,访问权限受限制。

(5)什么时候使用静态(成员变量和 成员函数)

   成员变量:当对象中出现共享数据时,可以定义为静态成员。对象中的特有数据要定义成非静态存在于堆内存中

  静态函数:当功能内部没有访问到静态数据时,可以定义为静态的。

(6)静态的应用

每个程序都有共性的功能,可以将这些功能抽取,独立封装,以便复用。

5 final 修饰符

A:作为一个修饰符。可以修饰变量、函数、类。

B:被final修饰的类不能被继承。

C:被final修饰的方法不能被重写。

D:被final修饰的变量(成员变量和局部变量),成为一个常数,只能赋值一次。当事物为固定值时,那么为了增强阅读性,都给这些值取一个名字,而这些值不需要改变,所以加上final修饰。

E:常量的书写格式为所有字母都需要大写,如果多个单词组成则单词间通过_下划线来连接。

F:内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。

6主函数

   主函数是一个特殊的函数,可以被jvm调用。作为程序的入口。

   public :代表函数的访问权限最大。

   static:代表随着类的加载而存在了。

   void:主函数没有具体的访问值。

   main:不是关键字,是特殊的单词,被jvm识别。

  (string[ ] arr):函数的参数,参数类型是一个数组,该数组的元素是字符串,表示字符串的数组。

   主函数是固定格式的,被jvm识别。

7 静态代码块

格式:static {  执行语句  }  给类初始化

构造代码块:{   执行语句  }  给对象初始化

特点:随着类的加载而加载,只执行一次。并且优先于main函数执行。

Java代码块 
一.在Java中,使用”{}”括起来的代码称为代码块,代码块可以分为以下四种: 
(1)普通代码块:就是类中方法的方法体 
  public void xxx(){ 
      //code 
  } 

(2)构造块:用{}裹起来的代码片段,构造块在创建对象时会被调用,每次创建对象 
        时都会被调用,并且优先于类构造函数执行。 
  { 
     //code 
  } 
(3)静态块:用static{}裹起来的代码片段,只会被执行一次(第一次加载此类时执行,比如说用Class.forName("")加载类时就会执行 
        static  block),静态块优先于构造块执行。 
  static{  
     //code 
  } 

(4)同步代码块:使用synchronized(obj){}裹起来的代码块,在多线程环境下,对共享数据进行读写操作是需要互斥进行的,否则 
            会导致数据的不一致性。常见的是synchronized用来修饰方法,其语义是任何线程进入synchronized需要先取得对象锁 
            如果被占用了,则阻塞,实现了互斥访问共享资源。而synchronized也是有代价的。 

    一个常见的场景是,一个冗长的方法中,其实只有一小段代码需要访问共享资源,这时使用同步块,就只将这小段代码 
    裹在synchronized  block,既能够实现同步访问,也能够减少同步引入的开销。 

    synchronized(obj){ 
       //code 
    } 

执行顺序:静态代码块<静态函数(不调用时不显示,先加载进来)<主函数<构造代码块<构造函数<普通代码块

8 帮助文档的制作

将class文件发送给别人时,其他人只要将该类设置到classpath路径下,就可以使用该类,但是他并不能打开查看这个文件的内容,也没法看到该类的方法和参数的具体作用。

在Java中我们可以制作帮助文档,让别人再不看到代码的情况下就可以使用。

帮助文档生成格式:

/**

@author 作者名字

@version 版本号

@param 参数名类型

@return 返回值类型

*/

Java之面向对象(一)——satatic&amp;final关键字

生成后在我制作的文档文件夹中打开index.html就可以看到自己制作的文档

Java之面向对象(一)——satatic&amp;final关键字