修饰符static和abstract

static

static可以修饰类中的方法,属性等,被修饰后的方法和属性可以通过类名直接调用也可以通过对象调用。普通的变量只能通过对象进行调用。

静态方法直接可以互相直接调用,非静态方法也可以直接调用静态方法,但是静态方法不能直接调用非静态方法。

eg:

  1. package shiyan;
  2. public class Person {
  3. public static int age; //静态属性
  4. public int score; //非静态
  5. public static void go(){ //静态方法
  6. System.out.println("静态方法");
  7. }
  8. public void run()//非静态
  9. {
  10. System.out.println("非静态");
  11. }
  12. public static void main(String[] args) {
  13. Person.age=1; //通过类调用
  14. Person.go(); //通过类调用
  15. go(); //静态方法互相调用
  16. Person p1=new Person();//创建对象
  17. p1.score=22; //只能通过对象调用
  18. p1.run(); //只能通过对象调用
  19. p1.age=1; //通过对象
  20. p1.go(); //通过对象
  21. }
  22. }

静态代码块

在类内将代码通过static{}括起来,在构造器之前执行,仅执行一次。类似的还有匿名代码块{}。

eg:

  1. package shiyan;
  2. public class StaticStatement {
  3. static {
  4. System.out.println("静态代码块"); //仅执行一次
  5. }
  6. {
  7. System.out.println("匿名代码块");//每次建对象都执行
  8. }
  9. public StaticStatement() //每次建对象都执行
  10. {
  11. System.out.println("构造器");
  12. }
  13. public static void main(String[] args) {
  14. StaticStatement s1=new StaticStatement();
  15. StaticStatement s2=new StaticStatement();
  16. }
  17. }

运行结果:

静态代码块

匿名代码块

构造器

匿名代码块

构造器

静态导入包

导入包时,仅仅导入类内的单个方法或属性

导入后可以直接使用该方法,不需要使用类调用方法。

eg:

  1. import static java.lang.Math.random; //静态导入包random
  2. import static java.lang.Math.PI; //静态导入包 PI为 π是常量
  3. public class Test{
  4. public static void main(String[] args)
  5. {
  6. System.out.print(random()); //直接调用Math类的方法random()
  7. System.out.print(PI);
  8. }
  9. }

abstract

abstract抽象类,抽象类不能实例化,他只是一个约束后面可以理解为会有人帮我们实现具体的功能。抽象类里可以有抽象类也可以有普通方法,但是普通类内不能存在抽象方法。

  1. 不能new这个抽象类,只能靠子类去实现它:约束!
  2. 抽象类中可以写普通方法
  3. 抽象方法只能在抽象类中

eg:

  1. //父类:
  2. package shiyan;
  3. public abstract class Abstract {
  4. public Abstract(){
  5. System.out.println("Abstract的构造器");
  6. }
  7. public static void go(){
  8. System.out.println("Abstract的普通方法");
  9. }
  10. public abstract void run();//仅仅约束,证明有这个方法方法没有实现的方法体
  11. public static void main(String[] args) {
  12. }
  13. }
  1. //子类:
  2. package shiyan;
  3. public class Son extends Abstract {//继承
  4. @Override
  5. public void run() { //实现方法
  6. System.out.println("子类实现父类的抽象方法");
  7. }
  8. public Son()
  9. {
  10. System.out.println("StaticStatement的构造器");
  11. }
  12. public static void main(String[] args) {
  13. Son s1=new Son();
  14. s1.run();//抽象方法,实现体已写
  15. s1.go();//继承自抽象类的普通方法
  16. }
  17. }

主要还是为了提高效率减少重复的代码,对于可以直接使用的用普通方法可以直接继承使用,对于有变化的可以使用抽象方法每次重新写出实现。

static可以修饰类中的方法,属性等,被修饰后的方法和属性可以通过类名直接调用也可以通过对象调用。普通的变量只能通过对象进行调用。

静态方法直接可以互相直接调用,非静态方法也可以直接调用静态方法,但是静态方法不能直接调用非静态方法。

eg:

  1. package shiyan;
  2. public class Person {
  3. public static int age; //静态属性
  4. public int score; //非静态
  5. public static void go(){ //静态方法
  6. System.out.println("静态方法");
  7. }
  8. public void run()//非静态
  9. {
  10. System.out.println("非静态");
  11. }
  12. public static void main(String[] args) {
  13. Person.age=1; //通过类调用
  14. Person.go(); //通过类调用
  15. go(); //静态方法互相调用
  16. Person p1=new Person();//创建对象
  17. p1.score=22; //只能通过对象调用
  18. p1.run(); //只能通过对象调用
  19. p1.age=1; //通过对象
  20. p1.go(); //通过对象
  21. }
  22. }

静态代码块

在类内将代码通过static{}括起来,在构造器之前执行,仅执行一次。类似的还有匿名代码块{}。

eg:

  1. package shiyan;
  2. public class StaticStatement {
  3. static {
  4. System.out.println("静态代码块"); //仅执行一次
  5. }
  6. {
  7. System.out.println("匿名代码块");//每次建对象都执行
  8. }
  9. public StaticStatement() //每次建对象都执行
  10. {
  11. System.out.println("构造器");
  12. }
  13. public static void main(String[] args) {
  14. StaticStatement s1=new StaticStatement();
  15. StaticStatement s2=new StaticStatement();
  16. }
  17. }

运行结果:

静态代码块

匿名代码块

构造器

匿名代码块

构造器

静态导入包

导入包时,仅仅导入类内的单个方法或属性

导入后可以直接使用该方法,不需要使用类调用方法。

eg:

  1. import static java.lang.Math.random; //静态导入包random
  2. import static java.lang.Math.PI; //静态导入包 PI为 π是常量
  3. public class Test{
  4. public static void main(String[] args)
  5. {
  6. System.out.print(random()); //直接调用Math类的方法random()
  7. System.out.print(PI);
  8. }
  9. }

abstract

abstract抽象类,抽象类不能实例化,他只是一个约束后面可以理解为会有人帮我们实现具体的功能。抽象类里可以有抽象类也可以有普通方法,但是普通类内不能存在抽象方法。

  1. 不能new这个抽象类,只能靠子类去实现它:约束!
  2. 抽象类中可以写普通方法
  3. 抽象方法只能在抽象类中

eg:

  1. //父类:
  2. package shiyan;
  3. public abstract class Abstract {
  4. public Abstract(){
  5. System.out.println("Abstract的构造器");
  6. }
  7. public static void go(){
  8. System.out.println("Abstract的普通方法");
  9. }
  10. public abstract void run();//仅仅约束,证明有这个方法方法没有实现的方法体
  11. public static void main(String[] args) {
  12. }
  13. }
  1. //子类:
  2. package shiyan;
  3. public class Son extends Abstract {//继承
  4. @Override
  5. public void run() { //实现方法
  6. System.out.println("子类实现父类的抽象方法");
  7. }
  8. public Son()
  9. {
  10. System.out.println("StaticStatement的构造器");
  11. }
  12. public static void main(String[] args) {
  13. Son s1=new Son();
  14. s1.run();//抽象方法,实现体已写
  15. s1.go();//继承自抽象类的普通方法
  16. }
  17. }

主要还是为了提高效率减少重复的代码,对于可以直接使用的用普通方法可以直接继承使用,对于有变化的可以使用抽象方法每次重新写出实现。

修饰符static和abstract的更多相关文章

  1. 三大修饰符static,final,abstract,接口和抽象类的区别

    package com.cityhero.test; public class ThreeModifier { //static静态的 // 概念:static可以修饰方法和属性,被static修的方 ...

  2. ArcGIS AddIN开发异常之--修饰符“static”对该项无效

    修饰符“static”对该项无效, 修饰符“internal”对该项无效. 该异常弹出的位置为Config.Designer.CS文件中相关插件的声明附近 internal static string ...

  3. 访问修饰符与可选修饰符static的使用

    在Java中修饰符较多,在这里简单说一说几个访问修饰符的选择使用,和可选修饰符static的使用. 一.访问修饰符:这是Java里用来控制访问类及类的方法.变量的访问权限,从而达到只暴露接口,来隐藏内 ...

  4. 【语法】修饰符 static extern const

    转载自:http://my.oschina.net/u/2560887/blog/552683 一.C语言中的static的作用 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有 ...

  5. JAVA中静态修饰符static的学习(初学)

    静态修饰符static,用于修饰类中的成员变量和成员函数. 用static修饰的成员变量也可叫做类变量. 什么时候使用静态 什么时候定义静态成员变量?     当对象中出现共享数据时,将该数据定义为静 ...

  6. 修饰符-static

    一.static静态修饰符 static修饰符能够修饰属性,方法,初始代码块,不能修饰局部变量和类. 静态的变量叫常量,非静态的变量叫实例变量. 1.修饰属性 package gc.test.java ...

  7. java静态修饰符static的使用

    class Person { private String name; private int age; /* * 假设每个Person对象的国籍都一样, * 那么每次调用都要赋值就会不合理. * 使 ...

  8. Java从入门到放弃——05.修饰符static,final,权限修饰符

    本文目标 static final: 权限修饰符:public,private,protected,缺省 1.static 静态修饰符,被static修饰的变量或者方法会被加载进静态区内存,不需要创建 ...

  9. 接口中字段的修饰符:public static final(默认不写) 接口中方法的修饰符:public abstract(默认不写)abstract只能修饰类和方法 不能修饰字段

    abstract只能修饰类和方法 不能修饰字段

随机推荐

  1. ffmpeg开发环境搭建--(linux)

    1.     下载源码: http://ffmpeg.org/download.html 2.     解压:tar –xvf ffmpeg-3.2.1.tar.bz2 3.     配置 Eg:./ ...

  2. js Promise finally All In One

    js Promise finally All In One finally let isLoading = true; fetch(myRequest).then(function(response) ...

  3. js 检测屏幕分辨率

    js 检测屏幕分辨率 class screenChecker { constructor() { this.screen = window.screen; this.fullscreen = fals ...

  4. JavaScript console.log Questions All In One

    JavaScript console.log Questions All In One "use strict"; /** * * @author xgqfrms * @licen ...

  5. 「NGK每日快讯」11.18日NGK公链第15期官方快讯

  6. 2021-2-19:请问你知道 Java 如何高性能操作文件么?

    一般高性能的涉及到存储框架,例如 RocketMQ,Kafka 这种消息队列,存储日志的时候,都是通过 Java File MMAP 实现的,那么什么是 Java File MMAP 呢? 什么是 J ...

  7. git笔记整理-learnGitBranching

    声明 此篇文章内容是本人在 github上寻找到Peter Cottle的项目 https://github.com/pcottle/learnGitBranching.git 中学习git相关命令时 ...

  8. SpringBoot+Vue豆宝社区前后端分离项目手把手实战系列教程01---搭建前端工程

    豆宝社区项目实战教程简介 本项目实战教程配有免费视频教程,配套代码完全开源.手把手从零开始搭建一个目前应用最广泛的Springboot+Vue前后端分离多用户社区项目.本项目难度适中,为便于大家学习, ...

  9. SpringBoot 项目初始化

    工作之余,想要学习一下SpringBoot,通过网络大量教程最终成功运行SpringBoot项目.  第一步 首先,通过教程发现一套完整的快速搭建SpringBoot项目网站:https://star ...

  10. spring-ioc注解-理解2 零配置文件

    没有xml配置文件下的对象注入,使用到一个Teacher类,Config配置类,Test测试类. 1.Teacher类 import lombok.Data; import org.springfra ...