linkin大话面向对象--java关键字
java中的关键字有以下几个,他们不能作任何其它的用途。 发现没,java中的关键字全是小写,java是严格区分大小写的。
abstract default null synchronized boolean do
if package this break double implements
private threadsafe byte else import protected throw extends instanceof
case false int return true catch final interface short try char finally long static void class float native super while for new switch continue public
transient
static用法:static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static
成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。
注意了:静态成员不能访问非静态成员。因为类成员是属于类的,类成员的作用域比实例成员的作用域更大,完全可能出现类成员已经初始化完成了,但是实例成员还不曾初始化的情况,如果允许类成员访问实例成员将会引起大量错误。
public class Linkin {
public static void test(){
System.out.println("梦想终究还是要有的,万一实现了呢。。。");
}
public static void main(String[] args) {
Linkin linkin = null;
//The static method test() from the type Linkin should be accessed in a static way
//这里eclipse会自动提示,null对象也可以访问它所属的类成员。我们应该尽量绕开这个误区,类成员就用类名作为主调来访问。
linkin.test();
} }
this用法:this表示当前对象。当前对象 : 当前正在调用实例成员的对象。换言之:谁调用了方法,谁就是当前对象
No. |
区别点 |
this |
super |
1 |
使用 |
调用本类中的字段或方法 |
从子类调用父类中的字段或方法 |
2 |
构造 |
可以调用本类构造方法,且有一个构造方法要作为出口 |
从子类调用父类的构造方法,不管子类如何安排最终一定会去调用,默认调用的是父类中的无参构造方法 |
3 |
要求 |
调用自身构造方法时放在构造方法首行 |
调用父类构造方法时放在子类构造方法首行 |
4 |
特殊 |
表示当前对象 |
表示父类对象 |
final修饰类不可以被继承,但是可以继承其他类。
final修饰的方法不可以被覆盖,但可以覆盖父类方法。
final修饰的变量称为常量,这些变量只能赋值一次。内部类在局部时,只可以访问被final修饰的局部变量。
final修饰的引用类型变量,表示该变量的引用不能变,而不是该变量的值不能变。比如说数组或者对象。
通常规范中:常量名称所有字母大写,若有多个单词组成,单词间使用下划线连接。
public static final修饰的常量称为全局常量;
public static final double PI = 3.14159265358979323846;
public static final String APP_SEPARATOR = "/";
- 可执行"宏替换"的final变量:
对于一个final变量来讲:不管他是类field,实例field,还是局部变量,只要满足下面3个条件,这个变量就不再是一个变量,而是相当于一个直接量。
1,使用final修饰符修饰
2,在定义该final变量时指定了初始值
3,该初始值可以在编译时就去确定下来
- 不可变类:
不可变类的意思就是创建该类的实例后,该实例的属性是不能改变的。java提供的8种包装类和String都是不可变类,当创建他们的实例后,其实例的属性是不能改变的。
成员变量是类初始化或者对象初始化而初始化的。当类初始化时,系统会为该类的属性分配内存,并分配默认值;当创建对象时,系统会为该对象的属性分配内存,并分配默认值。也就是说,当执行静态初始化块时可以对类属性赋初始化值,当执行普通初始化块时,构造器时可以对实例属性赋初始值。因此,成员变量的初始值可以在定义该变量时指定默认值,也可以在初始化块或者构造器中指定初始值。对于final修饰的成员变量来讲,一旦有了初始值,就不能被重新赋值,如果既没有在定义成员变量时指定初始值,也没有在初始化中,构造器中为成员变量指定初始值,那么这些变量的值将一直是系统分配的默认值,那么这些成员变量就完全失去了存在的意义。
所以呢?特别注意了:java语法规定,final修饰的成员变量必须由程序员显式指定初始值。
public class Test08 {
final int a;
final int b;
final int c = 1;
//The blank final field c may not have been initialized
//既没有指定默认值,也没有在初始化块或者构造器中指定初始值,编译报错
//final int d; public Test08(){
//系统不会对final成员属性进行默认的初始化,这里final成员a还没有值,直接访问编译报错
//System.out.println(a);
a=1;
//final变量c已经赋值过一次了,这里重新赋值,编译报错
//c=2;
} {
b = 2;
} public void test(){
//普通方法不能为final修饰的成员变量赋值或者指定初始化
//a = 4;
} }
public class Linkin {
public static void main(String[] args) {
final String str = "LinkinPark";
final String huhu = "binger"+1314;
final String str1 = str+huhu;
//普通的变量,不会执行"宏替换"
String str2 = "LinkinPark";
String str3 = str2+huhu;
//true
System.out.println(huhu == "binger1314");
//true
System.out.println(str1 == "LinkinParkbinger1314");
//false
System.out.println(str3 == "LinkinParkbinger1314");
} }
break:用于结束一个循环,跳出循环体。注意了是完全终止循环本身。
continue:终止本次循环,接着下一次的循环。注意了这里并没有完全终止循环本身。
return:不是专门用来结束循环的,他的功能是结束一个方法。不管这个return处于几层循环都直接结束这个方法。
public class Linkin {
public static void main(String[] args) {
for (int a = 0; a <= 5; a++) {
System.out.println(a);
if (a == 2) {
System.out.println("这里调用了break...");
break;
}
}
System.out.println("调用了上面的break的话,只是单纯的跳出上面那个循环,这行字会打印出来...");
for(int a = 0; a <= 5; a++){
System.out.println(a);
if (a == 2) {
System.out.println("这里调用了continue...");
continue;
}
}
System.out.println("调用了上面的continue的话,只是单纯的跳出上面那个循环,这行字会打印出来...");
for(int a = 0; a <= 5; a++){
System.out.println(a);
if (a == 2) {
System.out.println("这里调用了return...");
return;
}
}
System.out.println("调用了上面的return的话,这个方法就直接结束了,这行字不会打印出来...");
} }
值得注意的是,return还用于返回非void方法的返回值。这个很简单,就不做多的墨迹了。break和continue不仅可以结束其所在的循环,还可以结束其外层循环。
public class Linkin {
public static void main(String[] args) {
outer: for (int a = 0; a <= 3; a++) {
for (int b = 0; b <= 3; b++) {
System.out.print("a=" + a + ";b=" + b + " ");
if (b == 1) {
break outer;
}
}
}
System.out.println("=================");
outer: for (int a = 0; a <= 3; a++) {
for (int b = 0; b <= 3; b++) {
System.out.print("a=" + a + ";b=" + b +" ");
if (b == 1) {
continue outer;
}
}
}
}
}
linkin大话面向对象--java关键字的更多相关文章
- linkin大话面向对象--多态
java引用变量有2个类型,一个是编译时类型,一个是运行时类型: 编译时类型:声明的类型,把它看做是什么东西 运行时类型:真正的类型,实际上指的是什么东西 如果编译时类型和运行时类型不同,就出现多态. ...
- linkin大话面向对象--类和对象
我们每天在撸码,那么我们在敲什么东西呢?明显的我们在写类,写一个类,写一个接口,写某个接口里面写一些属性,在某个类里面写一个方法,然后以一个对象调用方法,对于j2ee来讲的话,可能还会写一些jsp,静 ...
- linkin大话面向对象--闭包和回调
先来理解2个概念:闭包和回调 什么是闭包? 闭包是一个可调用的对象,它记录了一些信息,这些信息来自于创建他的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为他不仅包含了外部类对象的信 ...
- linkin大话面向对象--继承
[修饰符] class SubClass extends SuperClass 按照这种关系,我们把SuperClass类称为父类或基类,把SubClass称为子类或派生类或拓展类.extend ...
- linkin大话面向对象--包和导入
我们现在的代码都扔在一个文件夹里面,比如以后我们做项目,是不是有可能有非常非常多的代码,那我就希望把不同功能和模块的类方便管理,放到不同的文件夹下,引出包概念. 什么是包,就一个文件目录,为了处理重名 ...
- linkin大话面向对象--GC和jar包
GC java的垃圾回机制是java语言的重要机制之一.当程序创建对象,数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存区中.当这块内存不再被任何变量引用时,这块内存就 ...
- linkin大话面向对象--内部类
内部类说白了就是类中有类 内部类:嵌套类 外部类:宿主类 内部类主要有以下作用:记住了3个字:多继承... 1,内部类提供了更好的封装,可以把内部类隐藏在外部类中,不允许同一个包中的其他类访问该类. ...
- linkin大话面向对象--枚举
枚举类(enum) 其实我们使用到枚举的地方还是很多的,其实我们可以完全人工的来实现枚举的功能.比如说我现在手里的项目我就是自己实现的枚举,说白了,枚举就是一个类的多例模式. 1,使用enum声明,默 ...
- linkin大话面向对象--抽象类
abstract [非private访问修饰符] 返回值类型 方法名称(参数列表); 当编写一个类时,我们往往会为该类定义一些方法,这些方法时用来描述该类的行为方式,那么这些方法都有具体的方法体. 但 ...
随机推荐
- Promise实现小球的运动
Promise简要说明 Promise可以处理一些异步操作:如像setTimeout.ajax处理异步操作是一函数回调的方式;当然ajax在jQuery版本升级过程中,编写方式也有所变动. P ...
- python_IO编程
本篇文章将介绍python里面的I/O编程.更多内容请参考:python学习指南 I/O编程 读写文件时最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们必须了解 ...
- CSS根据子元素个数不同定义样式
近日面试,遇见了一个这样的问题,不会,便记下来. 问题:如何根据子元素个数的不同定义不同的样式? 代码:HTML <ul> <li>1</li> <li> ...
- 【eclipse】Target runtime Apache Tomcat v7.0 is not defined解决
在eclipse中导入项目时提示Target runtime Apache Tomcat v7.0 is not defined, 解决方法:右键项目--properties--targeted ru ...
- IdentityServer(11)- 使用Hybrid Flow并添加API访问控制
关于Hybrid Flow 和 implicit flow 我在前一篇文章使用OpenID Connect添加用户认证中提到了implicit flow,那么它们是什么呢,它和Hybrid Flow有 ...
- Shell脚本之反引号【``】和 $()
一.奇怪的返回 今天在搞监控的时候,修改一个老脚本,主要是通过对操作系统进行判断来获取不同的监控参数.(获取top参数在不同操作系统上也有个坑,会在另外一篇里面写) 脚本如下,非常简单: #处理Cen ...
- 关于JS中变量提升的规则和原理的一点理解
关于变量提升,以前在一些教程和书籍上都听到过,平时开发中也知道有这个规律,但是今天突然在一个公开课中听到时,第一反应时一脸懵逼,然后一百度,瞬间觉得好熟悉啊,差点被这个概念给唬住了,不信我给你 ...
- RNN的简单的推导演算公式(BPTT)
附上y=2x-b拟合的简单的代码. import numpy as np x = np.asarray([2,1,3,5,6]); y = np.zeros((1,5)); learning_rate ...
- Android热修复框架汇总整理(Hotfix)
Android平台出现了一些优秀的热更新方案,主要可以分为两类:一类是基于multidex的热更新框架,包括Nuwa.Tinker等:另一类就是native hook方案,如阿里开源的Andfix ...
- 洛谷 P3410 拍照
洛谷 P3410 拍照 题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. ...