Java变量,修辞符,关键字

Java的变量主要分为三类,一类是实例变量,一类是静态变量也叫做类变量,一类是局部变量,在我们的Java里面没有全局变量这个说法;那么我们为什么要使用变量啦。举个简单的例子


一个变量最基本的要有几个要素构成,变量名,变量类型,变量值和变量作用域;

再了解变量作用域之前先来看看Java的修饰符:



访问权限   类   包  子类  其他包

    public     ∨   ∨   ∨     ∨

    protect    ∨   ∨   ∨     ×

    default    ∨   ∨   ×     ×

    private    ∨   ×   ×     ×

以上四种是访问权限修饰符。

每个变量都有其变量名,变量类型和访问权限。

下面来对比一下这几个变量:

局部变量:

1.只能使用默认的访问权限,即只能自一个类,和一个包中访问。

2.局部变量只有在方法和函数体中创建,当函数或方法执行的时候才会去创建局部变量,当方法执行完毕的

时候会去销毁。

3.局部变量里面系统不会默认的去给他分配默认值,所以要我们在使用前自己去分配值,如果是复合类型的

局部变量的话,可以通过New关键字去分陪值;

4.局部变量是堆栈级别的内部实现

5.局部变量是可见的,通常只能在一个方法和函数中可见;

实例变量:

1.实例变量在方法外面,类里面声明。访问权限会根据定义的访问控制符来分配;

2.实例变量有默认值,数值的是0,布尔值的为flase,字符型的位null;

3.实例变量名可以和局部变量名重复,但在程序执行的时候,会优先执行局部变量名,这也是java的就近原则;

4.实例变量可以在一个类的任何地方可见,其可见程度和访问修饰符有关;

5.实例变量的存储方式和他的类型有关。

静态变量:

1静态变量声明在方法和函数外面,类里面。而且必须要加上static关键字声明;

2.静态变量有默认值,数值的是0,布尔值的为flase,字符型的位null;

3.实例变量名可以和局部变量名重复,但在程序执行的时候,会优先执行局部变量名,这也是java的就近原则;

4.静态变量是在程序启动时创建在程序结束时销毁;

5.一般会把静态变量的名称大写;

6.静态变量也叫类变量,因为不论你创建多少个对象,静态变量始终都只有一个。

7.静态变量被存储在静态存储器中。这是罕见的使用静态变量以外声明为final,用作公共或私有常数。

最后再说说几个Java里面的关键字:

关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,还有特别意义的变量Java的关键字对java编译器有特殊的意义,

他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。

abstract标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。

implements实现  import导入 interface接口。package打包,声明仅仅指定了文件中所定义的类属于哪一个包。

throws扔,一个方法中发生异常但没有捕获,在方法头声明,由方法调用者处理。//throw后不允许有其他的语句。

final如果不希望某个类被其他的类继承,在这种情况下需要使用修饰符final来说明一个类是终极的,不能够做父类。

用final修饰的的量,叫做常量,常量是不可变化的,所以必须在创建的时候给它赋值,或者在初始化的时候给它赋值;

new该子句创建一个新的对象实例。New 子句必须指定一个可以用来创建实例的已定义类。可以在声明语句或赋值语句中使用 New。执行该语句时,

它将调用指定类的构造函数,传递提供的所有参数。

this引用属性,当方法中的参数和某个属性有相同的名字时,这是局部变量优先,属性被隐藏。然而,有时为了能够在方法中以用隐藏的属性,就可以用this区分,由this引用的就是属性,没有this引用的则是局部变量或者是参数。

其它

1、 catch捕获错误的语句。
2、 finally为了完成执行的代码而设计的,主要是为了程序的 健壮性和完整性,无论有没有异常发生都执行代码。
3、 native是方法 修饰符。Native方法是由另外一种语言(如c/c++,FORTRAN,汇编)实现的本地方法。因为在外部实现了方法,所以在 java代码中,就不需要声明了,有点类似于接口方法。Native可以和其他一些 修饰符连用,但是abstract方法和Interface方法不能用 native来修饰。
4、 strictfp修饰类和方法,意思是FP-strict,精确浮点,符合IEEE-754规范的。当一个 classinterfacestrictfp声明,内部所有的 floatdouble 表达式都会成为strictfp的。Interface method不能被声明为 strictfp的, class的可以。
5、 try 当try子句中的某行代码发生异常,会终止程序的运行,跳转到catch子句来执行。
6、 transient  变量 修饰符。标记为transient的 变量,在对象存储时,这些变量状态不会被持久化。当对象序列化的保存在 存储器上时,不希望有些字段数据被保存,为了保证安全性,可以把这些字段声明为transient。
7、 volatilevolatile修饰 变量。在每次被 线程访问时,都 强迫共享内存中重读该 成员变量的值。而且,当 成员变量发生变化时,强迫线程将变化值回写到 共享内存。这样在任何时刻,两个不同的线程总是看到某个 成员变量的同一个值。
8、 goto  java中关键字表中虽然有goto关键字但是在声明 变量时是不可以使用该单词的因为goto 是 Java 中一个没有使用的关键字,如果想叫做 保留字也可以。
一般 结构化程序,都不需要使用 Goto 语句的,在有分支和循环以及 递归调用之后,goto 完全可以不使用了。为了程序代码更简捷,对于 循环结构,还有  break 和  continue 用于跳转。而且, break 和  continue 都可以带标签,更增加了它们的灵活性。
最后整理几个面试题
final,finally,finalize的区别?
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,可以重载,但不能重写。
finally—表示总是执行的,即在try-catch语句中,匹配完异常处理之后会调用finally来执行清除操作,比如关闭流。也就是说只要在try-catch语句
中不论执行了什么,此方法总是会执行一遍;
	finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上,能否作用在char上;
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long都不能作用于swtich,因为long的范围要比int大,转换成int的时候不是自动转换。另外switch里面还支持枚举类型,从JDK1.7以后字符串类型也可以作用到switch语句上;
抽象类(abstract class)和接口(interface)有什么异同?
我觉得接口是对动作的抽象,即谁在做什么?谁就是我们的对象了,而做什么就是我们的接口动作。比如现在有个电脑类和一个
手机类,他们两个都可以下载东西。我们说电脑下载东西,那么下载东西就是我们的接口。而手机也可以下载东西,手机也可以
实现这个接口,所以我说接口是对动作的抽象。而抽象类则是对本源的抽象,抽象类里面主语是具体的,比如电脑能干嘛,
在抽象类中电脑就是是一个可以与之对应的事物,而我们只是抽象了能干嘛。所以说抽象类一般是单继承的。简单一点就是接口
声明谁能干什么,而抽象类声明,这个对象是什么,并且能够干什么;
接着再从语法上来比较一下:
1.抽象类是用abstract来修饰的,而接口是用interface来修饰的;
2.如果一个类继承了抽象类,那么这个类不一定是抽象类,只有实现了抽象
方法的类才叫抽象类,而如果一个类继承了接口,那么这个类必须是抽象类;
3.抽象类里面可以有普通方法,和普通变量,而接口里面的方法必须是抽象的,
接口的变量必须是静态的都可以访问的变量;
4.他们都有抽象方法;
5.接口可以多继承,而抽象类不可以多继承;
6.抽象类里面可以实现部分方法,而接口里面的方法都不能自己去实现;
当我们关注于一个事物本身去做什么事情的时候可以用抽象类,而当我们只关心一个操作的时候,
可以用接口;


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值