java笔记之static&final&abstract
知识需要不断回顾和重新认识
一: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的更多相关文章
- 浅析java修饰符之public default protected private static final abstract
浅析java修饰符之public default protected private static final abstract 一 修饰符的作用:用来定义类.方法或者变量,通常放在语句的最前端 ...
- java里的static/final含义
java里的static/final含义 static static可以修饰:属性,方法,代码段,内部类(静态内部类或嵌套内部类) static修饰的属性的初始化在编译期(类加载的时候),初始化后能改 ...
- Java 面向对象之static,final,匿名对象,内部类,包,修饰符
01final关键字概念 A: 概述 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承, 或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这 ...
- 菜鸡的Java笔记 第二十一 final 关键字
使用final定义类,属性,方法 final在一些书中被称为终结器,意思是:利用final定义的类不能够有子类,利用final定义的方法不能够被覆写,利用final定义的变量就成 ...
- 三大修饰符static,final,abstract,接口和抽象类的区别
package com.cityhero.test; public class ThreeModifier { //static静态的 // 概念:static可以修饰方法和属性,被static修的方 ...
- java笔记整理
Java 笔记整理 包含内容 Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...
- Java笔记8-抽象接口
高级特性部分: 抽象(abstract) 接口(interface) 提纲: 抽象类的定义和使用 模板设计模式的使用 接口的定义和使用 回调函数 区别抽象类和接口的异同 软件设计原则--------- ...
- java笔记——Java关键字static、final使用小结
static 1. static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的 ...
- java修饰符public final static abstract transient
JAVA 修饰符public final static abstract transient 关键字: public final static abstract ... 1.public prot ...
随机推荐
- CentOS下yum安装
centos最小化安装不会装yum,以下是安装方法:(所有操作均在ROOT用户下,系统版本是centos7) 一.删除原有YUM # rpm -aq|grep yum|xargs rpm -e --n ...
- selenium IE自动化问题汇总
驱动下载:http://selenium-release.storage.googleapis.com/index.html 没有修改IE的保护模式设置导致,通常看到报错信息如下: selenium. ...
- 51nod 1873 初中的算术【Java BigDecimal/高精度小数】
1873 初中的算术 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 Noder现在上初三了,正在开始复习中考.他每天要计算型如 (a× a× a× ...
- C. Heidi and Library (神奇的网络流)
C. Heidi and Library 题意 有 n 种分别具有价格 b 的书 a ,图书馆里最多同时存放 k 本书,已知接下来 n 天每天都有一个人来看某一本书,如果图书馆里没有则需要购买,问最少 ...
- java中split任意数量的空白字符
java程序中经常通过split截取字符串来取得其中的关键字.但是由于其中不同操作系统或者不同作者的习惯,经常会出现不同数量的空格,例如" "(3个空格):或者出现制表符.Ta ...
- Flash 3D学习计划
1.理解并记住3D渲染的一般管线流程(一天). 2.理解世界,取景,投影变换,并理解投影坐标系(一天). 3.学习VB,IB相关,理解三角形顶点顺序:在屏幕上显示2D矩形,并实现缩放,平移,旋转(三天 ...
- HTTP抓包工具Fiddler
http://blog.csdn.net/kobejayandy/article/details/16908261
- ubuntu10.10编译TQ2440的x86-qtopia-2.2.0具体问题总结及原因分析
转: http://blog.csdn.net/zyxlinux888/article/details/6705481 http://www.cnblogs.com/liu_xf/archive/20 ...
- Java实现中文算数验证码(算数运算+-*/)
原文:http://blog.csdn.net/typa01_kk/article/details/45050091 /** * creat verification code * */ @Actio ...
- 咏南下拉列表数据敏感控件--TYNDBSearch
咏南下拉列表数据敏感控件--TYNDBSearch 拥有下拉列表控件可以大大地加速软件系统的开发. 控件适用于DELPHI5及以上版本安装并使用. 控件的用法: procedure Tfgoods.s ...