知识需要不断回顾和重新认识

一:static

static类型变量初始值只能被赋值一次,它的整个生命周期是源程序,程序结束前变量都不会被释放。

例如:

 for(int i = 0; i<10; i++)
{
static int a = 0;
a++;
}

循环结束之后a=10.

静态局部变量和静态全局变量,注意作用范围。静态变量存在于内存中,不用实例化对象就可以使用它(静态局部变量走出函数,虽然它还是存在,但是不能使用)

因为static不依赖于实例化对象,它是属于整个类的,即所有对象共享一个静态变量,而如果在某个方法中定义了一个静态变量,它的实际意义不大,因为,这个静态变量只会在实例化了这个对象之后使用,已经变为了归某个对象所有,没有存在的意义。

当然,如果在static前边加上访问权限修饰符,会根据权限决定不同类是否能使用这个static变量。

基本类型的静态局部变量如果声明时没有覆初始值,系统自动赋予0.(使用的时候注意合理使用静态局部变量和全局变量,虽然静态局部变量的作用范围有限,但是可以通过再次调用这个定义它的函数使用这个局部变量,全局变量有时会造成意外的副作用)

so在程序中什么地方可以利用静态字段和静态构造方法?1:对象之间共享值;2:方便访问变量,比如不会经常变化而又频繁使用的数据,例如连接字符串,配置信息等,这样只用进行一次读取,以后就可以方便的使用了,同时也节约了托管资源,因为对一个类无论创建了多少个实例,它的静态字段永远都只有一个副本。而实例变量,每创建一个实例,jvm就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(实例对象.变量)。

static代码块仅在类加载的时候执行一次,所以如果需要通过计算初始化static变量,可以在静态代码块里边做。

static方法通过类名调用,所以,非静态函数可以直接使用静态变量,而static函数不能调用非static的变量,只能调用static类型的变量和函数,并且不能使用this或者super关键字,因为它属于整个类。static方法独立于任何实例,所以它必须被实现,不能是抽象的abstract。

二:final

无法改变的,可以修饰非抽象类、非抽象类成员方法和变量。

final类不能被继承,final类中的方法默认是final的;

final方法不能被子类方法覆盖,但可以被继承;

final成员变量表示常量,只能被赋值一次,赋值后不再改变;

final不能用于修饰构造函数。

note:父类的private成员方法是不能被子类覆盖,所以private类型的方法默认是final类型的。

fianl类:何时需要final类?设计的时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再被扩展。

final变量:一旦赋值,(可以修饰局部变量,静态变量和实例变量)不可修改,但是可以先声明而不给初始值,这样提高了灵活性,比如一个类中的final变量可以根据实例化的对象不同而有所不同(所以空白final依赖于某个对象使用),但是保持了不变的特征。这种先声明而不初始化叫做final空白,编译器都确保final在使用之前都会被初始化。

final方法:when?如果一个类不允许她的子类覆盖某个方法,则把这个方法定义为final类型。有两种目的:1:锁定方法,防止任何继承类修改她的意义和实现;2:高效:编译器在遇到调用final方法的时候会转入内嵌机制,大大提高执行效率。

三:abstract

抽象类(不可以被实例化,抽象方法描述系统具有什么功能,没有具体实现 )和具体类(可以被实例化,必须有方法体),:

可以修饰类和方法,修饰类时放在类名前;

有抽象方法的类一定是抽象类;(如果子类没有完全实现父类中的所有抽象方法,那么子类也必须被定义为抽象类,否则编译报错)

抽象类不一定有抽象方法,可以全是具体方法;

没有抽象构造方法,也没有抽象静态方法;

abstract修饰类:这个类不能生成对象实例,但可以作为对象变量声明的类型,即编译时类型,抽象类相当于类的半成品,需要子类继承并且覆盖其中的抽象方法。

abstract修饰方法:只有声明,没有实现(实现部分用;代替),需要子类继承实现(override覆盖),这样就可以以多态的方式调用。when?定义标准,方法一时间想不到具体怎么实现,或者需要子类去实现而定义某种标准。实质:制定标准(模版),通过子类实现标准。模板中不允许修改的方法可以用final,不公开的部分用protected。

(父类引用指向子类对象,使用多态,实际调用子类的方法)

java笔记之static&final&abstract的更多相关文章

  1. 浅析java修饰符之public default protected private static final abstract

    浅析java修饰符之public default protected private static final abstract 一   修饰符的作用:用来定义类.方法或者变量,通常放在语句的最前端 ...

  2. java里的static/final含义

    java里的static/final含义 static static可以修饰:属性,方法,代码段,内部类(静态内部类或嵌套内部类) static修饰的属性的初始化在编译期(类加载的时候),初始化后能改 ...

  3. Java 面向对象之static,final,匿名对象,内部类,包,修饰符

    01final关键字概念 A: 概述 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承, 或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这 ...

  4. 菜鸡的Java笔记 第二十一 final 关键字

    使用final定义类,属性,方法            final在一些书中被称为终结器,意思是:利用final定义的类不能够有子类,利用final定义的方法不能够被覆写,利用final定义的变量就成 ...

  5. 三大修饰符static,final,abstract,接口和抽象类的区别

    package com.cityhero.test; public class ThreeModifier { //static静态的 // 概念:static可以修饰方法和属性,被static修的方 ...

  6. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  7. Java笔记8-抽象接口

    高级特性部分: 抽象(abstract) 接口(interface) 提纲: 抽象类的定义和使用 模板设计模式的使用 接口的定义和使用 回调函数 区别抽象类和接口的异同 软件设计原则--------- ...

  8. java笔记——Java关键字static、final使用小结

    static  1. static变量     按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的 ...

  9. java修饰符public final static abstract transient

    JAVA 修饰符public final static abstract transient  关键字: public final static abstract ...  1.public prot ...

随机推荐

  1. CentOS下yum安装

    centos最小化安装不会装yum,以下是安装方法:(所有操作均在ROOT用户下,系统版本是centos7) 一.删除原有YUM # rpm -aq|grep yum|xargs rpm -e --n ...

  2. selenium IE自动化问题汇总

    驱动下载:http://selenium-release.storage.googleapis.com/index.html 没有修改IE的保护模式设置导致,通常看到报错信息如下: selenium. ...

  3. 51nod 1873 初中的算术【Java BigDecimal/高精度小数】

    1873 初中的算术 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 Noder现在上初三了,正在开始复习中考.他每天要计算型如 (a× a× a× ...

  4. C. Heidi and Library (神奇的网络流)

    C. Heidi and Library 题意 有 n 种分别具有价格 b 的书 a ,图书馆里最多同时存放 k 本书,已知接下来 n 天每天都有一个人来看某一本书,如果图书馆里没有则需要购买,问最少 ...

  5. java中split任意数量的空白字符

    java程序中经常通过split截取字符串来取得其中的关键字.但是由于其中不同操作系统或者不同作者的习惯,经常会出现不同数量的空格,例如"   "(3个空格):或者出现制表符.Ta ...

  6. Flash 3D学习计划

    1.理解并记住3D渲染的一般管线流程(一天). 2.理解世界,取景,投影变换,并理解投影坐标系(一天). 3.学习VB,IB相关,理解三角形顶点顺序:在屏幕上显示2D矩形,并实现缩放,平移,旋转(三天 ...

  7. HTTP抓包工具Fiddler

    http://blog.csdn.net/kobejayandy/article/details/16908261

  8. ubuntu10.10编译TQ2440的x86-qtopia-2.2.0具体问题总结及原因分析

    转: http://blog.csdn.net/zyxlinux888/article/details/6705481 http://www.cnblogs.com/liu_xf/archive/20 ...

  9. Java实现中文算数验证码(算数运算+-*/)

    原文:http://blog.csdn.net/typa01_kk/article/details/45050091 /** * creat verification code * */ @Actio ...

  10. 咏南下拉列表数据敏感控件--TYNDBSearch

    咏南下拉列表数据敏感控件--TYNDBSearch 拥有下拉列表控件可以大大地加速软件系统的开发. 控件适用于DELPHI5及以上版本安装并使用. 控件的用法: procedure Tfgoods.s ...