java中的关键字之修饰符关键字

  • 关键字
  • 修饰符型关键字
  • static关键字
  • static变量和static方法
  • static关键字的问题
  • 能通过this访问静态成员变量吗?
  • final关键字
  • final关键字的几种用法
  • 1、修饰变量
  • 2、修饰方法中的参数
  • 3、修饰方法
  • 4、修饰类
  • abstract关键字

关键字

修饰符型关键字

public修饰符:任何类都可以访问
protected修饰符:类及其子类或同一个包下的类可 以访问

default(默认不写):类及当前包下可以访问

private修饰符:访问权限仅限于类内部

javasynchronized关键字修饰变量 java修饰类的关键字_final关键字

static关键字

static变量和static方法

static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。但是在非静态成员方法中可以访问静态成员方法或者变量。

package Test;

public class Test {

	public static void main(String[] args) {
		Test2 xm=new Test2(19,"男", "小明");//对Test2类进行实例化
        
		//name变量为静态变量,所以直接类名.变量名就可以访问,但是age、sex是非静态,需要进行实例化,通过对象名.变量名进行访问
		System.out.println(Test2.name+"的年龄为 : "+xm.age);
		System.out.println(Test2.name+"的性别为 : "+xm.sex);
        
        
		//play方法为静态方法,直接类名.方法名就可以调用,但是run方法是非静态方法,所以也需要实例化,通过对象名.方法名进行调用
		Test2.play();
		xm.run();
	}

}
class Test2{
	//name变量为静态,age、sex变量为非静态变量
	static String name;
	int age;
	String sex;
	public Test2(int age, String sex,String name) {
		this.age = age;
		this.sex = sex;
		this.name=name;
	}
	//非静态方法run
	void run() {
		System.out.println("跑步。。。。");
	}
    
	//静态方法play
	static void play() {
		System.out.println("打篮球。。。");
	}
	
}

运行结果为

小明的年龄为 : 19
小明的性别为 : 男
打篮球。。。
跑。。。。

static关键字的问题

能通过this访问静态成员变量吗?

看如下的例子:

package Test;



public class Test3 {
	static String name="小红";//静态变量

	public static void main(String[] args) {
		new Test3().Xin();//调用Xin方法
	}
	void Xin() {
		String name="小明";//非静态变量,局部变量
		System.out.println("名字为:"+this.name);
	}
}

运行结果为:

名字为:小红

通过例子可以看出,this.name 调用的变量是类的成员变量,所以说,this.变量名 是用来调用类的成员变量的方法,所以静态和非静态都可以通过this.来调用,如果是方法中定义的局部变量,则不能用this.变量名 来调用。

final关键字

final关键字是Java中的关键字,其意思为最终的,不可以在进行修改,可以修饰变量,类,方法

final关键字的几种用法
1、修饰变量

用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值。final 修饰的变量

可以先声明,后赋值。但是只能定义一次final变量。

当用final作用于类的成员变量时,成员变量(局部变量只 需要 保证在使用之前被初始化赋值即可)必须在

定义时或者构造器中进行初始化赋值。

2、修饰方法中的参数

编写方法时,可以在参数前面添加final关键字,它表示在整个方法中,不会(实际上是不能)改 变参数

的值,具体类似于修饰数据。

即不能改变参数的值,但是可以改变引用类型参数的对象的 值。同时,即使没有final的修饰,参数的改

变也不会影响到方法外的变量。

3、修饰方法

final关键字修饰方法,它表示该方法不能被覆盖(重写)。另外类中所有的private方法都隐式指定为是final的,由于它无法在类外使用private修饰的方法,所以没有办法覆盖它。

4、修饰类

用final关键字修饰的类是无法被继承的,且final类中的所有成员方法都会被隐式地指定为final方法

abstract关键字

abstract 意思为抽象,是定义抽象类,抽象方法的关键字

父类是将子类所共同拥有的属性和方法进行抽取,这些属性和方法中,有的是已经明确实现了的,有的还无法确定,那么我们就可以将其定义成抽象,在后日子类进行重用,进行具体化。这样,抽象类也就诞生了。

抽象类是为了把相同的但不确定的东西的提取出来,为了以后的重用。定义成抽象类的目的,就是为了在子类中实现抽象类。

比如说,定义一个球类运动父类,球类名字都能确定,但是具体怎么玩,没有固定的方法,可能是拍着玩(排球),有可能是用拍子击打玩(乒乓球),这个时候就可以将怎么玩这个方法定义成一个抽象方法。

package Test;

class Test4 extends QiuY{   //Test4继承抽象类QiuY

	//进行对抽象方法的实现
	@Override
	void QiuW(String name) {
		super.qiuname=name;
		System.out.println(qiuname+"应该用拍子打");
	}

}
//定义一个抽象类,因为类中有抽象方法,所以必须是抽象类
abstract class QiuY{
	String qiuname;
	//因为怎么玩不确定,所以要定义为抽象方法
	abstract void QiuW(String name);
}
public class Test45{
	public static void main(String[] args) {
		Test4 test2=new Test4();
		test2.QiuW("乒乓球");
	}
}

运行结果为:

乒乓球应该用拍子打

1、用abstract修饰的类,即抽象类;用abstract修饰的方法,即抽象方法。

2、一旦类中包含了abstract方法,那类该类必须声明为abstract类,且该类不能用来创建对象。

在学习看来,这几个关键字大概是这样的理解,可以多去构思一下,这几个关键字到底本质上都是干什么用的,这次介绍的这几个关键字都是一些方法、变量、类的修饰符关键字,可以更好的让以后在写程序的小伙伴们可以严谨一些,解决自己很不理解的修饰符