今天遇到一题目:
import java.util.Stack;
public class aClass {
fun() {
static int i = 0;
i++;
}
public static void main(String args[]) {
aClass obj = new aClass();
obj.fun();
obj.fun();
}
}
question is :
what will be the value of I ?
A. Compilation error
B. Run time Error
C. 1
D. 2
此题考察修饰符,函数定义等,故从网上搜罗了下相关资料,总结如下:
类、方法、成员变量和局部变量的可用修饰符
修饰符
|
类
|
成员访求
|
构造方法
|
成员变量
|
局部变量
|
abstract(抽象的)
|
√
|
√
|
-
|
-
|
-
|
static (静态的)
|
-
|
√
|
-
|
√
|
-
|
public(公共的)
|
√
|
√
|
√
|
√
|
-
|
protected(受保护的)
|
|
√
|
√
|
√
|
-
|
private(私有的)
|
-
|
√
|
√
|
√
|
-
|
synchronized(同步的)
|
-
|
√
|
-
|
-
|
-
|
native(本地的)
|
-
|
√
|
-
|
-
|
-
|
transient(暂时的)
|
-
|
-
|
-
|
√
|
-
|
volatie(易失的)
|
-
|
-
|
-
|
√
|
-
|
final(不要改变的)
|
√
|
√
|
-
|
√
|
√
|
|
|
|
|
|
|
|
类 修饰符
|
Public
|
可以从其他类中访问
|
Abstract
|
本类不能被实例化
|
Final
|
不能再声明子类
|
构造函数修饰符
|
Public
|
可以从所有的类中访问
|
Protected
|
只能从自己的类和它的子类中访问
|
Private
|
只能在本类中访问
|
域/成员变量修饰符
|
Public
|
可以从所有的类中访问
|
Protected
|
只能从本类和它的子类中访问
|
Private
|
只能从本类中访问它
|
Static
|
对该类的所有实例只能有一个域值存在
|
transient
|
不是一个对象持久状态的一部份
|
Volatile
|
可以被异步的线程所修改
|
final
|
必须对它赋予初值并且不能修改它
|
局部变量 修饰符
|
final
|
必须对它赋予初值并且不能修改它
|
方法修饰符
|
Public
|
可以从所有的类中访问它
|
Protected
|
只能从本类及其子类中访问它
|
Private
|
只能从本类中访问它
|
abstract
|
没有方法体,属于一个抽象类
|
final
|
子类不能覆盖它
|
static
|
被绑定于类本身而不是类的实例
|
native
|
该方法由其他编程语言实现
|
asnchronized
|
在一个线程调用它之前必须先给它加
|
类的修饰符整合
一.类
类的修饰符:
Public:可以在其他任何类中使用,默认为统一包下的任意类。
Abstract:抽象类,不能被实例化,可以包含抽象方法,抽象方法没有被实现,无具体功能,只能衍生子类。
Final:不能被继承。
二.变量
变量修饰符:
一个类的成员变量的声明必须在类体中,而不能在方法中,方法中声明的是局部变量。
1. 可访问修饰符:
2. static:类变量:一个类所拥有的变量,不是类的每个实例有的变量。类变量是指不管类创建了多少对象,系统仅在第一次调用类的时候为类变量分配内存,所有对象共享该类的类变量,因此可以通过类本身或者某个对象来访问类变量。
3. final:常量。
4. volatile:声明一个可能同时被并存运行的几个线程所控制和修改的变量。
实例变量:和类变量对应,即每个对象都拥有各自独立的实例变量。
三.方法:(和变量对象分为实例方法和类方法,并用有无static修饰区别)
类方法:使用static关键字说明的方法
1.第一次调用含类方法的类是,系统只为该类创建一个版本,这个版本被该类和该类的所有实例共享。
2.类方法只能操作类变量,不能访问实例变量。类方法可以在类中被调用,不必创建实例来调用,当然也可以通过对象来调用。
实例方法:实例方法可以对当前对象的实例变量操作,而且可以访问类变量。
方法可以重载,要求:方法名相同,但是参数必须有区别。(参数不同可以使类型不同,顺序不同,个数不同)
方法的返回类型:若无返回类型,则声明为void.
方法中的变量作用域:
1. 成员变量:整个类。
2. 局部变量:定义起到方法块结束为止。
3. 方法参数:整个方法或者构造方法。
4. 异常处理参数:参数传递给异常处理方法。
构造方法:和类同名的方法。为新建对象开辟内存空间后,用于初始化新建的对象。不能用对象显式的调用。
静态初始化器:格式:static{<赋值语句组>}
静态初始化器与构造方法的区别:
静态初始化器
|
构造方法
|
对类的静态域初始化
|
对新建的对象初始化
|
类进入内存后,系统调用执行
|
执行new后自动执行
|
属特殊语句(仅执行一次)
|
属特殊方法
|
方法的修饰符:
抽象方法:用abstract修饰,只有声明部分,方法体为空,具体在子类中完成。
类方法:静态方法,用static修饰,
1. 调用时,使用类名作为前缀,而不是类的某个实例对象名
2. 不能被单独对象拥有,属于整个类共享。
3. 不能处理成员变量。
最终方法:用final修饰,不能被子类重新定义的方法。
本地方法:用native修饰的方法,表示用其他语言书写的特殊方法,包括C,C++,FORTRAN,汇编语言等。
四.类成员的访问控制符:
即类的方法和成员变量的访问控制符,一个类作为整体对象不可见,并不代表他的所有域和方法也对程序其他部分不可见,需要有他们的访问修饰符判断。
权限如下:
访问修饰符
|
同一个类
|
同包
|
不同包,子类
|
不同包,非子类
|
private
|
√
|
|
|
|
protected
|
√
|
√
|
√
|
|
public
|
√
|
√
|
√
|
√
|
默认
|
√
|
√
|
|
|
PS:
1。开头题目的answer是A:原因自己好好想想,实在不知道,就放Eclipse/NetBeans看看
2。想想局部变量为何最多是final修饰
欢迎留言
分享到:
相关推荐
变量类型是编程语言中非常重要的一个概念,全局变量、局部变量、静态变量都是程序员经常使用的变量类型,但是这些变量类型之间的区别和联系却经常让人感到困惑。今天我们将详细地探讨这些变量类型之间的区别和联系,...
全局变量和局部变量是编程语言中两种不同的变量类型,它们在C++中有着明确的差异,主要体现在作用域、内存分配、生命周期以及对外...同时,使用`static`修饰符可以帮助控制变量的作用域和生命周期,减少潜在的错误。
在方法内声明的变量称为局部变量,只在该方法内部可用;在类内但不在任何方法内声明的变量称为字段,可在类的任何非私有方法中访问。生命周期是指变量从创建到销毁的时间段,局部变量在方法执行完毕后被释放,而字段...
例如,函数参数就是局部变量,仅在函数内部可用。 3.2.2 全局变量则在函数外部定义,作用域从定义位置到程序结束。示例3-3通过对比局部变量和全局变量的使用,强调了它们的不同。 3.2.3 变量的屏蔽效果:如果在局部...
final变量不能被重新赋值,这适用于局部变量、成员变量和静态变量。final变量通常用于声明常量,以提高代码的可读性和安全性。 在Java中,引用类型的概念也很重要。引用类型变量存储的是对象的引用,而不是对象本身...
2. 局部内部类:在方法中定义的内部类,局部内部类不能有访问说明符,因为它不是外围类的一部分,但是它可以访问当前代码块内的常量,和此外围类所有的成员。 3. 静态内部类:静态内部类是指在外部类的静态成员中...
修饰符是用来控制类、方法或变量的可见性和行为的关键词。在Java中,常用的修饰符包括`public`、`protected`、`private`、`static`、`final`等。 #### 52. 本地方法 (Native Methods) 本地方法是指在Java中声明但在...
以上概述了Java基础中的一些重要知识点,包括基本数据类型、引用数据类型、面向对象的概念、类的成员、方法重载、包和访问修饰符、数组、构造方法、`this`关键字、实例成员与静态成员、对象和类的初始化以及继承等。...
+ 与局部变量类似,局部内部类的生命周期是当前方法的生命周期 C. 静态内部类:作为外部类的一个静态成员存在。 * 静态内部类的特点: + 可以定义静态成员 + 可以访问外部类的静态成员 + 不需要外部类的对象来...
此外,`private`、`public`和`protected`这些访问控制修饰符不能用于局部变量,因为它们只适用于类成员(即字段和方法)。另外,`final`关键字可以用于局部变量,表示该变量一旦赋值后就不能再改变,但`final`不能...
存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C++ 程序中可用的存储类: ...函数的局部变量和参数通常是自动存储类。存储类说明符auto显式声明
- `this`关键字引用当前对象,常用于区分实例变量和局部变量,或者在构造方法中调用其他构造方法。 7. **final类、方法和变量**: - final类不能被继承,final方法不能被覆盖,final变量一旦赋值后不可更改。 8....
- `public`成员在任何地方都可访问,`private`成员仅限于类内部,`protected`成员在包内和子类中可用,无修饰符的成员在包内可见。 8. **静态成员**: - `static`关键字用于声明静态成员,它们属于类而非类的实例...
首先,我们要了解`static`修饰符在全局变量和局部变量中的作用。在全局作用域中,`static`用来声明一个静态全局变量。这类变量只在当前源文件中可见,不会在其他源文件中产生副本,解决了全局变量的可见性和内存管理...
在汇川AM600 中,`PRIVATE` 访问修饰符表示方法和属性仅在当前类内部可用,不应被继承;而`PUBLIC` 访问修饰符表示方法和属性在所有地方都可访问,当被继承时,其访问修饰符默认为空,意味着在继承类中同样可访问。 ...
例如,方法内的局部变量只在该方法内有效,而类级别的变量(也称为成员变量)在整个类中都可用。 构造器是类的一个特殊方法,它的主要任务是在创建新对象时进行初始化。构造器的名字与类名相同,且不返回任何值。...
1. **类的声明和成员组织**:在C#中,类是面向对象编程的基础,用于封装数据和行为。类可以包含字段(属性)、方法、构造函数等成员。成员的组织通常遵循一定的规则,如访问修饰符(public, private, protected)的...
成员变量在类加载时(静态)或对象创建时(实例)初始化,局部变量在声明和赋值后才可用。 常见的运行时异常包括`NullPointerException`、`ArrayIndexOutOfBoundsException`、`ArithmeticException`、`IOException`...