java中static的用法及注意点

在关键词的使用上,我们已经对static方法有所了解,为了防止在使用时出现一些不必要的错误,了解它的使用范围是每个人都要掌握的。本篇把static的使用注意点分为两个方面,一个是访问的范围,另一个是有关方法调用的注意,下面我们一起来看看完整的static使用注意点吧。

1、使用static方法的时候,只能访问static声明的属性和方法,而非static声明的属性和方法是不能访问的。

package com.jk.ref;
class People{
String name;
private static String country="中国";
public People(String name){
this.name=name;
}
public void tell(){
System.out.println("name:"+name+" "+"country:"+country);
}
/**
 * @return the country
 */
public static String getCountry() {
return country;
}
/**
 * @param country the country to set
 */
public static void setCountry(String country) {
People.country = country;
}
}
public class StaticDemo01 {

public static void main(String[] args) {
// TODO Auto-generated method stub
People.setCountry("shanghai");
People ps1=new People("zhangsan");
//People.country="上海";
ps1.tell();
People ps2=new People("lisi");
// ps2.country="上海";
ps2.tell();
People ps3=new People("wangwu");
// ps3.country="上海";
ps3.tell();
}
}

2、父类引用只能调父类和子类重写方法,父子同名方法不会覆盖而是遮蔽。

public class TestMain {
public static void main(String[] args) {
Super sup = new Sub(); //封装(向上造型)
sup.m1(); //父类引用无法调子类未重写方法,输出mi in Super
sup.m2();//调用子类方法m2,继承先构建父类方法,方法名相同覆盖(重写)方法,输出m2 in Sub
Sub sub = (Sub)sup; //拆箱(向下造型)
sub.m1(); //调用子类静态方法m1,先构建父类方法,方法名相同方法名相同遮蔽方法,输出m2 in Sub
sub.m2();//调用子类方法m2,继承先构建父类方法,方法名相同覆盖(重写)方法,输出m2 in Sub
}
}
class Super{ //父类
public static void m1() { //父类静态方法
System.out.println(“m1 in Super”);
}
public void m2() { //父类方法
System.out.println(“m2 in Super”);
}
}
class Sub extends Super{ //子类
public static void m1() { //子类静态方法
System.out.println(“m1 in Sub”);
}
public void m2() { //子类方法
System.out.println(“m2 in Sub”);
}
}

内容扩展:

深度总结

引用一位网友的话,说的非常好,如果别人问你static的作用;如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的;如果是说 可以构成 静态代码块,那别人认为你还可以; 如果你说可以构成 静态内部类, 那别人认为你不错;如果你说了静态导包,那别人认为你很OK;

那我们就先在这几方面一一对static进行总结;然后说一些模糊的地方,以及一些面试中容易问道的地方;

static方法

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

到此这篇关于java中static的用法及注意点的文章就介绍到这了,更多相关java中使用static的注意点内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java中的static关键字深入理解

    在学习Java以来很长一段时间,我都不能理解为什么修饰一个方法的关键字各不相同,为什么有的方法可以直接调用,而有的方法需要用对象才能调用.毫不夸张的说,最近一次让我决定去整理清楚static关键字,是因为在写jdbc工具类时,其中通过静态代码块来实现加载驱动才让我对它有了新的认识. 通俗来讲,归为几点: 由static关键字修饰的方法或成员变量,不需依赖对象,就可直接访问.(通过 类名.方法名() 或 类名.属性 直接调用) static关键字不会影响到变量或方法的作用域 static关键字不允

  • 一文带你快速了解java中的static关键词

    Static基本规则: (1)一个类的静态方法只能访问静态属性. (2)一个类的静态方法不能直接调用非静态方法. (3)如果访问权限允许,static属性和方法可以使用对象加'.'方式调用,当然也可以使用实例加'.'方式调用. (4)静态方法中不存在当前对象,所以不能使用this,当然也不能使用super. (5)静态方法不能被非静态方法覆盖. (6)构造方法不允许被声明为static的. static关键词,可以加在方法上,成员变量上,代码块. 类就不要想了. 1. static方法 stat

  • 详解java中static关键词的作用

    在java中,static是一个修饰符,用于修饰类的成员方法.类的成员变量,另外可以编写static代码块来优化程序性能:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问. static关键词的作用 1.静态成员变量的语法特定 2.静态函数的语法特定 3.静态代码块的语法特定 定义静态成员变量 Person.java class Person{ static int a; } 按照以前可以这么调用 public class Test1{

  • 在java中main函数如何调用外部非static方法

    使用外部方法时(不管是static还是非static),都要先new一个对象,才能使用该对象的方法. 举例如下: 测试函数(这是错误的): public class Test { public static void main(String[] args) { Employee employee = null; employee.setName("旺旺"); //有警告,况且这里也执行不下去 employee.setEmail("ww@qq.com"); emplo

  • Java父类继承中的static和final用法

    1.父类中staitic修饰的静态方法,不能覆盖.不能继承. 2.父类中staitic修饰的变量或常量,能覆盖.不能继承. static修饰的变量和方法,只属于类本身,不属于对象:当声明一个对象时,并不产生static变量和方法的拷贝.也就是说,用static修饰的变量和方法在类加载的时候,会分配一块存储空间,所有此类的对象都可以操控此块存储空间: 注意:当子类没有与父类同名的static变量(或方法时),子类的对象也可操控这块内存空间.但是,子类并没有继承父类中static修饰的变量和方法.这

  • Java import static及import原理区别解析

    import static静态导入是JDK1.5中的新特性.一般我们导入一个类都用 import com.....ClassName;而静态导入是这样:import static com.....ClassName.*;这里的多了个static,还有就是类名ClassName后面多了个 .* ,意思是导入这个类里的静态方法.当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了.然后在这个类中,就可以直接用方法名调用静态方法,而不必用ClassName.方法名 的方式来调用. 这种方

  • 浅谈java中的声明常量为什么要用static修饰

    今天定义一个类常量,想着也只有这个类可以用到,就没用static关键字修饰.结果sonar代码检查提示: Rename this field "PERSON_TYPE_USER" to match the regular expression '^[a-z][a-zA-Z0-9]*$'. 我一想我这是正确的命名规范啊,于是百度一搜这提示,发现前面加个static关键字修饰就可以了. 那么问题来了,我就当前类要使用,不需要设置成全局常量也可以,用static修饰常量有什么好处? 好处就是

  • 浅析java中static的用法

    static的作用: 1.将对象层级提升为类层级 (即将对象可以调用的,提升为对象和类均可调用的成员):            //推荐使用类来调用   ClassNme.静态成员 (包括变量.方法.成员对象) 2.static修饰的成员,在类加载时即准备完成,而不需要创建对象:   //类加载只做一次: 类名 的时候会类加载; new 对象时会类加载 3.静态成员方法只能访问静态成员,不能访问非静态成员(因为调用该方法时可能还没有创建对象):    而非静态成员方法既能访问非静态成员,又能访问

  • java中static的用法及注意点

    在关键词的使用上,我们已经对static方法有所了解,为了防止在使用时出现一些不必要的错误,了解它的使用范围是每个人都要掌握的.本篇把static的使用注意点分为两个方面,一个是访问的范围,另一个是有关方法调用的注意,下面我们一起来看看完整的static使用注意点吧. 1.使用static方法的时候,只能访问static声明的属性和方法,而非static声明的属性和方法是不能访问的. package com.jk.ref; class People{ String name; private s

  • java中static关键字用法详解

    前言 static对我们来说并不陌生,也是面试经常碰到的问题,今天抽空整理了一篇总结作为笔记保存起来! static用法可以分为三大块:静态变量.静态方法.静态代码块,下面将从这三个方面分析 静态方法 通常在一个类中定义一个方法为static,即为静态方法,无需本类的对象即可调用此方法 声明为static的方法有要注意以下几点: · 它们仅能调用其他的static方法. · 它们只能访问static变量. · 它们不能以任何方式引用this或super. public class MainCla

  • 浅析java 的 static 关键字用法

    本篇浅析java中static的用法,主要五个方面:静态成员变量,静态方法,静态块,静态内部类,静态导包. 首先还是一张表格说一下静态对象和非静态对象的区别: 静态对象 非静态对象 归属 类共同具有 类的各个实例独立拥有 内存分配 内存空间上固定的 附属类分配 分配空间顺序 优先分配静态对象空间 优先分配静态对象空间,初始化也一样 1 静态变量,静态方法,静态块 静态对象,静态方法都是在原对象和方法上加上static关键字修饰,表示类可以直接调用这些,而不需要实例化后再调用.具有的好处是: 1-

  • java之static关键字用法实例解析

    本文实例讲述了java中static关键字用法,分享给大家供大家参考.具体分析如下: 一.介绍: 1.在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份. 2.用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static成员.(静态方法不再是针对于某个对象调用,所以不能访问非静态成员) 3.可以通过对象引用或类名(不需要实例化)访问静态

  • JAVA中static方法的用法实例详解

    本文实例讲述了JAVA中static方法的用法.分享给大家供大家参考,具体如下: static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享.只要这个类被加载,Java虚拟机就能根据类名在运行时数据区或者方法区内找到他们.因此,static对象可以在它的任何对象创建之前访

  • 带你了解Java中Static关键字的用法

    目录 Java中Static关键字的一些用法详解 1. Static 修饰类属性,因为静态成员变量可以通过类名+属性名调用,非静态成员变量不能通过类名+属性名调用: 2. Static 修饰类方法,可以通过类名.静态方法名的方式调用静态方法,不可以用类名.静态方法名调用非静态方法: 3. 静态代码块,匿名代码块,构造函数.三者的调用顺序为(静态代码块(只调用1次) --> 匿名代码块 --> 构造函数). 总结 Java中Static关键字的一些用法详解 1. Static 修饰类属性,因为静

  • java 中 ChannelHandler的用法详解

    java 中 ChannelHandler的用法详解 前言: ChannelHandler处理一个I/O event或者拦截一个I/O操作,在它的ChannelPipeline中将其递交给相邻的下一个handler. 通过继承ChannelHandlerAdapter来代替 因为这个接口有许多的方法需要实现,你或许希望通过继承ChannelHandlerAdapter来代替. context对象 一个ChannelHandler和一个ChannelHandlerContext对象一起被提供.一个

  • Java中isAssignableFrom的用法详解

    class1.isAssignableFrom(class2) 判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口.如果是则返回 true:否则返回 false.如果该 Class 表示一个基本类型,且指定的 Class 参数正是该 Class 对象,则该方法返回 true:否则返回 false. 1. class2是不是class1的子类或者子接口 2. Object是所有类的父类 一个例子搞定: package com.auuz

  • java中enum的用法

    本文实例讲述了java中enum的用法.分享给大家供大家参考.具体分析如下: 1. 基本用法 复制代码 代码如下: enum Day {     SUNDAY, MONDAY, TUESDAY, WENDSDAY, THURSDAY, FRIDAY, SATURDAY; } 枚举是常量,所以应该用大写. 2. 枚举是对象 枚举隐含地继承了java.lang.Enum,所以它具有java.lang.Enum的属性和方法.遍历枚举: 复制代码 代码如下: public class Main {   

随机推荐