修饰符static和abstract

static

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

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

eg:

package shiyan;

public class Person {
public static int age; //静态属性
public int score; //非静态
public static void go(){ //静态方法
System.out.println("静态方法");
}
public void run()//非静态
{
System.out.println("非静态");
}
public static void main(String[] args) {
Person.age=1; //通过类调用
Person.go(); //通过类调用
go(); //静态方法互相调用
Person p1=new Person();//创建对象
p1.score=22; //只能通过对象调用
p1.run(); //只能通过对象调用
p1.age=1; //通过对象
p1.go(); //通过对象
}
}

静态代码块

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

eg:

package shiyan;

public class StaticStatement {
static {
System.out.println("静态代码块"); //仅执行一次
}
{
System.out.println("匿名代码块");//每次建对象都执行
}
public StaticStatement() //每次建对象都执行
{
System.out.println("构造器");
} public static void main(String[] args) {
StaticStatement s1=new StaticStatement();
StaticStatement s2=new StaticStatement();
}
}

运行结果:

静态代码块

匿名代码块

构造器

匿名代码块

构造器

静态导入包

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

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

eg:

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

abstract

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

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

eg:

//父类:
package shiyan; public abstract class Abstract {
public Abstract(){
System.out.println("Abstract的构造器");
}
public static void go(){
System.out.println("Abstract的普通方法");
} public abstract void run();//仅仅约束,证明有这个方法方法没有实现的方法体 public static void main(String[] args) { }
}
//子类:

package shiyan;

public class  Son extends Abstract {//继承
@Override
public void run() { //实现方法
System.out.println("子类实现父类的抽象方法");
} public Son()
{
System.out.println("StaticStatement的构造器");
} public static void main(String[] args) {
Son s1=new Son();
s1.run();//抽象方法,实现体已写
s1.go();//继承自抽象类的普通方法
}
}

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

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

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

eg:

package shiyan;

public class Person {
public static int age; //静态属性
public int score; //非静态
public static void go(){ //静态方法
System.out.println("静态方法");
}
public void run()//非静态
{
System.out.println("非静态");
}
public static void main(String[] args) {
Person.age=1; //通过类调用
Person.go(); //通过类调用
go(); //静态方法互相调用
Person p1=new Person();//创建对象
p1.score=22; //只能通过对象调用
p1.run(); //只能通过对象调用
p1.age=1; //通过对象
p1.go(); //通过对象
}
}

静态代码块

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

eg:

package shiyan;

public class StaticStatement {
static {
System.out.println("静态代码块"); //仅执行一次
}
{
System.out.println("匿名代码块");//每次建对象都执行
}
public StaticStatement() //每次建对象都执行
{
System.out.println("构造器");
} public static void main(String[] args) {
StaticStatement s1=new StaticStatement();
StaticStatement s2=new StaticStatement();
}
}

运行结果:

静态代码块

匿名代码块

构造器

匿名代码块

构造器

静态导入包

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

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

eg:

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

abstract

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

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

eg:

//父类:
package shiyan; public abstract class Abstract {
public Abstract(){
System.out.println("Abstract的构造器");
}
public static void go(){
System.out.println("Abstract的普通方法");
} public abstract void run();//仅仅约束,证明有这个方法方法没有实现的方法体 public static void main(String[] args) { }
}
//子类:

package shiyan;

public class  Son extends Abstract {//继承
@Override
public void run() { //实现方法
System.out.println("子类实现父类的抽象方法");
} public Son()
{
System.out.println("StaticStatement的构造器");
} public static void main(String[] args) {
Son s1=new Son();
s1.run();//抽象方法,实现体已写
s1.go();//继承自抽象类的普通方法
}
}

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

修饰符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. Excel导出时设置单元格的格式为文本

    问题: 用excel导出数据时,如何设置单元格格式的数字分类为"文本",默认是"常规"? 比如:导出编码0235A089,在Excel查看默认显示的是没有前面的 ...

  2. woj1012 Thingk and Count DP好题

    title: woj1012 Thingk and Count DP好题 date: 2020-03-12 categories: acm tags: [acm,dp,woj] 难题,dp好题,几何题 ...

  3. PAT L2-020 功夫传人【BFS】

    一门武功能否传承久远并被发扬光大,是要看缘分的.一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱-- 直到某一支的某一代突然出现一个天分特别高的弟子(或者是吃到了灵丹.挖到 ...

  4. python阿里云api查询域名是否可以注册(CheckDomain)

    import requests from fun import * from urllib import parse url ='http://domain.aliyuncs.com/?' acces ...

  5. CSS will-change All In One

    CSS will-change All In One CSS animation effect live demo https://nextjs.org/conf/ https://nextjs.or ...

  6. how to install GitLab on Raspberry Pi OS

    how to install GitLab on Raspberry Pi OS GitLab & Raspberry Pi refs https://about.gitlab.com/ins ...

  7. npm & app-node-env

    npm & app-node-env $ npm i -g app-node-env # OR $ yarn global add app-node-env demo $ ane env=ap ...

  8. app启动速度怎么提升?

    简介: APP 启动速度的重要性不言而喻.高德地图是一个有着上亿用户的超级 APP,本文从唤端技术.H5 启动页.下载速度.APP加载.线程调度和任务编排等方面,详解相关技术原理和实现方案,分享高德在 ...

  9. JDK环境解析,安装和目的

    目录 1. JDK环境解析 1.1 JVM 1.2 JRE 1.3 JDK 2. JDK安装 2.1 为什么使用JDK8 2.1.1 更新 2.1.2 稳定 2.1.3 需求 2.2 安装JDK 2. ...

  10. 《容器高手实战: Dockerfile最佳实践》

    Dockerfile最佳实践一个容器对应一个进程一个Docker容器应该只对应一个进程,也就是一个Docker 镜像一般只包含一个应用的制品包(比如.jar). 在需要组合多个进程的场景,使用容器组( ...