在java中有很多关键字,主要讲一下一些比较难懂的关键字
1.访问限定符
public:在同一个工程里可以使用
protected:在同一个包下可以使用或者是不同包的子类
默认的:在同一个包下可以被使用
private:只能是在一个类中使用
以上属性按照开放性从大到小
子类继承父类时,访问限定符只能放大或相同不能缩小。
原因:子类继承父类以后,子类重写父类的一些方法,如果创建一个父类的对象,调用方法,因为子类重写了,因此会调用子类的方法,如果子类的访问限定符比父类小,那么对象就不能调用子类中的方法了。会报错。
class A{
protected String name;
int num;
public void study(){
System.out.println("父类的学习!");
}
}
class B extends A{
public static void main(String []args){
B b=new B();
String c=b.name;
int d=b.num; //error!!!,默认的访问限定只能在同一个包下使用 A a=new A();
a.study();
}
private void study(){
System.out.println("子类的学习!");
}
}
this 和super
this: 用法一 指调用的当前对象,哪个对象调用了setName这个方法,this就这个对象
class A{
protected String name;
int num;
public void setName(String name){
this.name=name;
}
}
this:用法二 在构造方法中指构造方法,但是在一个构造方法this必须在第一行,每个构造方法都可以使用this
public class A{
public String name;
public int num;
public A() {
this("默认");
}
public A(String name) {
this.name = name;
}
public A(int num){
this("调用");
this.num=num;
}
}
super的用法和this的第二种用法一样,只是用来调用父类的构造方法,同时也可以调用父类的方法
class B extends A{
public static void main(String []args){
B b=new B();
b.study();
}
private void study(){
super.study(); //调用父类的study方法
}
public B(){
super(); //调用父类的构造方法
}
}
3.final 可以用来定义类,属性,方法, 变量
final定义类的时候表示该类不能被继承,但是该类中的一些属性是可以被修改的
final定义属性和变量的时候表示该属性或者是变量只能被赋值一次,并且不能再被修改
public final class A{
} // 表示不能被继承
public final int num=100; //表示只能赋值一次
public final void trst(){ //表示不能被重写
}
4.static 可以定义属性,方法,代码块
static 修饰属性表示这一个类所有的对象共同使用的一个变量指向同一个地址,一个对象改变该属性,那么所有的对象 的该属性都相应的变化了。
static修饰方法表示这个方法的调用只和类相关,与对象无关,对象时无法调用静态方法的。
static的属性和方法只能通过类名来调用。
静态代码块在类被创建的时候就执行了静态代码块中的代码。
代码块用来初始化数据,在调用函数之前就会调用该代码块中代码。
public class A{
public A(){
System.out.println("A");
}
public static void study(){
System.out.println("B");
}
static {
System.out.println("C");
}
{
System.out.println("D");
}
public static void main(String []args){
A a=new A();
a.study();
}
}
输出结果是: CDAB
public class A{
public A(){
System.out.println("A");
}
public static void study(){
System.out.println("B");
}
static {
System.out.println("C");
}
{
System.out.println("D");
}
public static void main(String []args){
A a=new A();
}
}
输出结果是: C
1.访问限定符
public:在同一个工程里可以使用
protected:在同一个包下可以使用或者是不同包的子类
默认的:在同一个包下可以被使用
private:只能是在一个类中使用
以上属性按照开放性从大到小
子类继承父类时,访问限定符只能放大或相同不能缩小。
原因:子类继承父类以后,子类重写父类的一些方法,如果创建一个父类的对象,调用方法,因为子类重写了,因此会调用子类的方法,如果子类的访问限定符比父类小,那么对象就不能调用子类中的方法了。会报错。
class A{
protected String name;
int num;
public void study(){
System.out.println("父类的学习!");
}
}
class B extends A{
public static void main(String []args){
B b=new B();
String c=b.name;
int d=b.num; //error!!!,默认的访问限定只能在同一个包下使用 A a=new A();
a.study();
}
private void study(){
System.out.println("子类的学习!");
}
}
this 和super
this: 用法一 指调用的当前对象,哪个对象调用了setName这个方法,this就这个对象
class A{
protected String name;
int num;
public void setName(String name){
this.name=name;
}
}
this:用法二 在构造方法中指构造方法,但是在一个构造方法this必须在第一行,每个构造方法都可以使用this
public class A{
public String name;
public int num;
public A() {
this("默认");
}
public A(String name) {
this.name = name;
}
public A(int num){
this("调用");
this.num=num;
}
}
super的用法和this的第二种用法一样,只是用来调用父类的构造方法,同时也可以调用父类的方法
class B extends A{
public static void main(String []args){
B b=new B();
b.study();
}
private void study(){
super.study(); //调用父类的study方法
}
public B(){
super(); //调用父类的构造方法
}
}
3.final 可以用来定义类,属性,方法, 变量
final定义类的时候表示该类不能被继承,但是该类中的一些属性是可以被修改的
final定义属性和变量的时候表示该属性或者是变量只能被赋值一次,并且不能再被修改
public final class A{
} // 表示不能被继承
public final int num=100; //表示只能赋值一次
public final void trst(){ //表示不能被重写
}
4.static 可以定义属性,方法,代码块
static 修饰属性表示这一个类所有的对象共同使用的一个变量指向同一个地址,一个对象改变该属性,那么所有的对象 的该属性都相应的变化了。
static修饰方法表示这个方法的调用只和类相关,与对象无关,对象时无法调用静态方法的。
static的属性和方法只能通过类名来调用。
静态代码块在类被创建的时候就执行了静态代码块中的代码。
代码块用来初始化数据,在调用函数之前就会调用该代码块中代码。
public class A{
public A(){
System.out.println("A");
}
public static void study(){
System.out.println("B");
}
static {
System.out.println("C");
}
{
System.out.println("D");
}
public static void main(String []args){
A a=new A();
a.study();
}
}
输出结果是: CDAB
public class A{
public A(){
System.out.println("A");
}
public static void study(){
System.out.println("B");
}
static {
System.out.println("C");
}
{
System.out.println("D");
}
public static void main(String []args){
A a=new A();
}
}
输出结果是: C