关键字是有特定含义的一类单词,其单词名已被系统"注册",在写代码时不可用于声明变量,其颜色在java中为紫红色
如int boolean byte char 等,
extends import implements等,
if while do for等,
static final 等,
如int boolean byte char 等,
extends import implements等,
if while do for等,
static final 等,
void return
try catch finally throw throws
this,super,
public protected private 默认,以及instanceof 等
instanceof用于判断一个对象是否属于一个类模板,如果是,返回true,否则为false
表达式:(对象 instanceof 类模板)
用法:if(对象 instanceof 类模板)等等 多用于判断强转是否能成功
--------------------------------------------
tips:8大基本数据类型与其他数据类型的区别:
this,super,
public protected private 默认,以及instanceof 等
instanceof用于判断一个对象是否属于一个类模板,如果是,返回true,否则为false
表达式:(对象 instanceof 类模板)
用法:if(对象 instanceof 类模板)等等 多用于判断强转是否能成功
--------------------------------------------
tips:8大基本数据类型与其他数据类型的区别:
我们都知道,8大基本数据类型是一种关键字,也叫类类型,那么他与普通类型(Sring,Color,自定义类等)有什么区别呢?
其中一些很基本的区别在这里就不再累赘了,但其中还有一些区别可以在等于号中体现,比如int a=3 int b=3;
a==b这个逻辑表达式是true的,但是如果
Integer a=new Integer(1);
Integer b=new Integer(1);
那么a==b是false的,其原因就在于关键字int 只能定义"指针"即变量,并不能new对象,像数值1,2,3什么的在内存中都有
固定的地址,如果只是 Integer a =1 Integer b=1 那么a==b就是true了
---------------------------------------------
重点:final与static:
其中一些很基本的区别在这里就不再累赘了,但其中还有一些区别可以在等于号中体现,比如int a=3 int b=3;
a==b这个逻辑表达式是true的,但是如果
Integer a=new Integer(1);
Integer b=new Integer(1);
那么a==b是false的,其原因就在于关键字int 只能定义"指针"即变量,并不能new对象,像数值1,2,3什么的在内存中都有
固定的地址,如果只是 Integer a =1 Integer b=1 那么a==b就是true了
---------------------------------------------
重点:final与static:
final意为最终的,final类即代表他只能有一个对象,final属性代表他只能赋值一次,final方法代表他只能被重写一次
而其中final类只能有一个对象那就意味着他不能被继承,因为在继承里面,子类想要拿到父类里面的东西就必须要有一个
父类的对象,所以在调用子类的构造方法时会自动调用父类默认的构造方法,如果多个子类能调用一个final的父类对象,
那么就必然会有多个final对象被构造出来,这也就违背了final的定义。
而其中final类只能有一个对象那就意味着他不能被继承,因为在继承里面,子类想要拿到父类里面的东西就必须要有一个
父类的对象,所以在调用子类的构造方法时会自动调用父类默认的构造方法,如果多个子类能调用一个final的父类对象,
那么就必然会有多个final对象被构造出来,这也就违背了final的定义。
(补充:在匿名内部类调用外部的局部变量的时候,该变量必须要加final修饰,因为局部定义的变量在遇到相应的大括号后
会被清除,但是匿名内部类new的对象属于堆,清除机制和栈里面的不一样,即遇到相应的大括号后不一定会被清除,那么
如果该内部类使用了外部的局部变量,那么其使用的局部变量就有可能在自身被清除之前被清除,从而发生错误,所以必须要
加final修饰)
会被清除,但是匿名内部类new的对象属于堆,清除机制和栈里面的不一样,即遇到相应的大括号后不一定会被清除,那么
如果该内部类使用了外部的局部变量,那么其使用的局部变量就有可能在自身被清除之前被清除,从而发生错误,所以必须要
加final修饰)
static意为静态的,静态的属性与方法会被单独放在一个静态的内存的空间里面,他不依赖于类的对像,而是依托于类模板
本身,比如Math类,用的时候都是Math.abs(),Math.tan()等等,这里并没有new一个Math对象,因为Math里面的方法都是
静态方法。静态属性和静态方法一样既可以被类模板直接调用也可以被类的对象调用,静态的属性就意味着他是依托类模板
而存在的,即使该静态类new了多个对象,但那个静态属性仍是属于类模板的,换句话说就是只有一个,既然这样,
那final 属性与 static属性有什么区别呢?
个人理解,除了他们内存存放的地方不一样,实质上都是"唯一"的,final代表唯一,static亦是唯一,只不过在编译的时候
final的值一旦被修改就会报错,而static的值被修改却不会报错,也正是因为static不会报错,那么在编程的过程中便会
出现一些问题,比如有一个类模板的有多个对象,其中一个对象改了static的值,那么所有的对象的值都会被改变成对应的值
,这有时候是我们不想看到的。
---------------------------------------
个人理解,除了他们内存存放的地方不一样,实质上都是"唯一"的,final代表唯一,static亦是唯一,只不过在编译的时候
final的值一旦被修改就会报错,而static的值被修改却不会报错,也正是因为static不会报错,那么在编程的过程中便会
出现一些问题,比如有一个类模板的有多个对象,其中一个对象改了static的值,那么所有的对象的值都会被改变成对应的值
,这有时候是我们不想看到的。
---------------------------------------
什么事自执行代码?
自执行代码:
格式:
class xx{ class yy{
{ static{
int=1 int b=2
或
}
}
} }
自执行代码:
格式:
class xx{ class yy{
{ static{
int=1 int b=2
或
}
}
} }
即类XX与yy里面的中间两个括号括起来的部分
自执行代码是先于调用方法之前的,即int a=1会在其所在类调用构造函数之前调用,int b=2也会在调用静态函数之前调用,
而因为static依赖于类模板,所以int b=2只能被调用一次,无论有多少对象被构造。
自执行代码是先于调用方法之前的,即int a=1会在其所在类调用构造函数之前调用,int b=2也会在调用静态函数之前调用,
而因为static依赖于类模板,所以int b=2只能被调用一次,无论有多少对象被构造。
---------------------------------------
继承模式:public protected private 默认,四种
继承模式:public protected private 默认,四种
主要弄清楚默认与protected的区别:假设有package1和package2,分别有一个A类和B类,如果是直接在A类里面调用B类里的
protected 方法与属性是调不到的,但是如果A类继承了B类,那就可以调到了。但是同样的情况下,如果B类里的变量与方法
是默认的,那么即使是A继承了B也调不到
protected 方法与属性是调不到的,但是如果A类继承了B类,那就可以调到了。但是同样的情况下,如果B类里的变量与方法
是默认的,那么即使是A继承了B也调不到
---------------------------------------
this 与super
this 与super
super代表父类的对象,this代表本身所指代的对象。
值得注意的是,在子类调用构造函数时会自动调用父类默认的构造函数,如果父类的构造方法被修改过比如(重载),
那子类的构造方法也必须要修改得和父类形式一致,否则会报错。
同样,this和super在显式调用的时候必须放在代码块的第一行(想要显式地一起的调用this()和super()就会出现冲突),
否则会报错,但是如果不写super的构造方法,那就会隐式的调用父类的构造方法,此时不与this冲突。
值得注意的是,在子类调用构造函数时会自动调用父类默认的构造函数,如果父类的构造方法被修改过比如(重载),
那子类的构造方法也必须要修改得和父类形式一致,否则会报错。
同样,this和super在显式调用的时候必须放在代码块的第一行(想要显式地一起的调用this()和super()就会出现冲突),
否则会报错,但是如果不写super的构造方法,那就会隐式的调用父类的构造方法,此时不与this冲突。