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

一: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. 设置电脑(windows)自动关机的方法

    下面有三种设置方法可以自动关机. 设置一 定时自动关机 假如你需要电脑在20:20自动关机,那么只需要在“开始”菜单中选择“运行”,然后输入at 20:20 Shutdown -s,点击“确定”即可. ...

  2. 我从16ASPX上下了一个程序在运行时出错是怎么回事?运行时出现用户SA登陆失败,但是我已经把数据库导入SQL

    如果你账号密码正确,那你可能没有打开你的管线服务,或者没有配置好你的客户端

  3. (2)WPF XAML

    一.创建一个空白界面 <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.co ...

  4. (10)java基础知识-字符串

    String s和 new String 的区别 String s1="hello"; String s2= new String("hello"); Stri ...

  5. csu1812

    csu1812 题意 求三角形和矩形交的面积. 分析 半平面交.把三角形的三条边当作直线去切割矩形,最后求切割后的多边形面积即可. code #include<algorithm> #in ...

  6. python 传不可变对象 or 可变对象

    可更改(mutable)与不可更改(immutable)对象 在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象 ...

  7. SQL数据库学习系列之一

    数据库知识的重要性不言而喻,以下链接给出了最最基础知识的讲解. 第一讲:SQL 语法 第二讲:SQL SELECT 语句 第三讲:SELECT DISTINCT 语句 第四讲:SQL WHERE 子句 ...

  8. xcode 6 exporting ipa 提示 Your account already has a valid iOS distribution certificate 的另一种解决方法

    背景: 1. XCode 6.1 2. 证书:develop 证书 3. Scheme 为Device 操作: 在Product - Archive 包过程中,选择Save for Ad hoc De ...

  9. Ubuntu下安装配置JDK

    第一步:下载jdk-7-linux-i586.tar.gz wget -c http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-i586 ...

  10. 安装dcm4chee-arc-light-5.4.1-mysql步骤

    一.进入网址: https://github.com/dcm4che/dcm4chee-arc-light/wiki/Installation 这个是GitHub上面给的步骤,可能会比较难理解,按照所 ...