java static private_java语言基础之关键字1(public、protested、private、static)

关键字static

在java语言中,static用来修饰成员变量和成员方法,也可形成静态代码块来优化程序性能(特性:只会在类加载的时候执行一次)。

static变量也称作静态变量,静态变量和非静态变量的区别是:

静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。

而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

(1)静态变量/方法调用

public class A {

static int x = 1;

void a() {

{

System.out.println("调用非静态方法");

b();///非静态方法中调用静态方法

}

}

static void b() {

{

System.out.println("调用静态方法!");

}

}

public static void main(String[] args) {

System.out.println(A.x);

/// static int b = 2;不允许在修饰局部变量,这样会报错的

A.b();///静态方法直接用类名调用

A st = new A();

st.a();

}

}

package 大圣归来;

class person{

String name;

int age;

static String country;///静态是被所有对象所共享的

public person(String name,int age) {

this.name = name;

this.age = age;

}

public person(String name,int age,String country) {

this.name = name;

this.age = age;

this.country = country;

}

public void show() {

System.out.println("姓名:"+name+"年龄:"+age+"国籍:"+country);

}

}

public class persondemo {

public static void main(String [] args) {

person p = new person("A",23,"中国");

p.show();

person p1 =new person("B",65);

p1.show();

}

}

/*

姓名:A年龄:23国籍:中国

姓名:B年龄:65国籍:中国

*/

(2)静态代码块

注意:1、java语法规定,static是不允许用来修饰局部变量的,也可以说static块可以出现类中的任何地方(只要不是方法内部)。

2、static方法就是没有this的方法。在static方法内部是不能调用非静态方法的,当是反过来就可以了。

3、static可以在没有创建对象的情况下,仅仅通过类本身来调用static方法,也就是说方便没有创建对象的情况下进行调用(变量/方法)

不可以使用protected来修饰class

关键字(public、private、protected)

默认方法,public、private、protected方法都可以在同一个类(本类)下调用。

package Training;

public class Father {

void show() {

System.out.println("默认show!");

}

public void show1() {

System.out.println("public show1!");

}

private void show2() {

System.out.println("private show2!");

}

protected void show3() {

System.out.println("protected show3!");

}

public static void main (String[] args) {

Father f = new Father();

f.show();

f.show1();

f.show2();

f.show3();

}

}

private属于私有的,只能为本类(子类、无关类)所用。其他可以在同一个包调用。

package Training;

public class son extends Father{

public static void main(String [] args) {

Father f = new Father();

f.show();

f.show1();

// s.show2();

f.show3();

System.out.println("**************");

son s= new son();

s.show();

s.show1();

// s.show2();

s.show3();

}

}

package Training;

public class tect {

public static void main(String []args) {

Father f = new Father();

f.show();

f.show1();

//f.show2();

f.show3();

}

}

只有protected、public能在不同包下的(子类、无关类)调用。

package Training1;

import Training.Father;

public class son2 extends Father{

public static void main(String [] args) {

Father f = new Father();

//f.show();

f.show1();

//s.show2();

// f.show3();

System.out.println("**************");

son2 s= new son2();

//s.show();

s.show1();

//s.show2();

s.show3();

}

}

package Training1;

import Training.Father;

class tect2 {

public static void main(String[] args) {

Father f = new Father();

//f.show();

f.show1();

//f.show2();

//f.show3();

}

}

以上权限修饰符的可见范围:

本类         同一个包下      不同包下的子类     不同包下的无关类

private         可以

默认             可以               可以

protected     可以               可以               可以

public           可以               可以               可以                     可以

参考资料:

https://zhidao.baidu.com/question/294516388.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值