修饰符static和abstract
修饰符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抽象类,抽象类不能实例化,他只是一个约束后面可以理解为会有人帮我们实现具体的功能。抽象类里可以有抽象类也可以有普通方法,但是普通类内不能存在抽象方法。
- 不能new这个抽象类,只能靠子类去实现它:约束!
- 抽象类中可以写普通方法
- 抽象方法只能在抽象类中
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抽象类,抽象类不能实例化,他只是一个约束后面可以理解为会有人帮我们实现具体的功能。抽象类里可以有抽象类也可以有普通方法,但是普通类内不能存在抽象方法。
- 不能new这个抽象类,只能靠子类去实现它:约束!
- 抽象类中可以写普通方法
- 抽象方法只能在抽象类中
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的更多相关文章
- 三大修饰符static,final,abstract,接口和抽象类的区别
package com.cityhero.test; public class ThreeModifier { //static静态的 // 概念:static可以修饰方法和属性,被static修的方 ...
- ArcGIS AddIN开发异常之--修饰符“static”对该项无效
修饰符“static”对该项无效, 修饰符“internal”对该项无效. 该异常弹出的位置为Config.Designer.CS文件中相关插件的声明附近 internal static string ...
- 访问修饰符与可选修饰符static的使用
在Java中修饰符较多,在这里简单说一说几个访问修饰符的选择使用,和可选修饰符static的使用. 一.访问修饰符:这是Java里用来控制访问类及类的方法.变量的访问权限,从而达到只暴露接口,来隐藏内 ...
- 【语法】修饰符 static extern const
转载自:http://my.oschina.net/u/2560887/blog/552683 一.C语言中的static的作用 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有 ...
- JAVA中静态修饰符static的学习(初学)
静态修饰符static,用于修饰类中的成员变量和成员函数. 用static修饰的成员变量也可叫做类变量. 什么时候使用静态 什么时候定义静态成员变量? 当对象中出现共享数据时,将该数据定义为静 ...
- 修饰符-static
一.static静态修饰符 static修饰符能够修饰属性,方法,初始代码块,不能修饰局部变量和类. 静态的变量叫常量,非静态的变量叫实例变量. 1.修饰属性 package gc.test.java ...
- java静态修饰符static的使用
class Person { private String name; private int age; /* * 假设每个Person对象的国籍都一样, * 那么每次调用都要赋值就会不合理. * 使 ...
- Java从入门到放弃——05.修饰符static,final,权限修饰符
本文目标 static final: 权限修饰符:public,private,protected,缺省 1.static 静态修饰符,被static修饰的变量或者方法会被加载进静态区内存,不需要创建 ...
- 接口中字段的修饰符:public static final(默认不写) 接口中方法的修饰符:public abstract(默认不写)abstract只能修饰类和方法 不能修饰字段
abstract只能修饰类和方法 不能修饰字段
随机推荐
- spring再学习之设计模式
今天我们来聊一聊,spring中常用到的设计模式,在spring中常用的设计模式达到九种. 第一种:简单工厂 三种工厂模式:https://blog.csdn.net/xiaoddt/article/ ...
- Linux系统诊断必备技能之三:查看信息系统常用命令
一.概述 Linux操作系统的学习中,CLI下进行操作,需要掌握大量命令,Linux的命令有很多,对于命令的学习大家记住只能是熟能生巧,所以现在把日常使用命令为大家罗列一部分,仅供参考. 二.常用命令 ...
- element-ui select get selected option object
element-ui select get selected option object value-key="value" === String :value="{va ...
- awesome youtube programming video tutorials
awesome youtube programming video tutorials youtube programming tutorials https://www.youtube.com/fe ...
- React vs Vue in 2020
React vs Vue in 2020 技术选型 React // UserProfile.jsx function UserProfile({id, showAvatar, onFollowCli ...
- element ui 停止维护了
️♂️ element ui 停止维护了 最近看到有人说 element ui 已经停止维护了,还有点不相信; 不过到 github 验证一下,好像是真的呀 4 个月,没有任何更新了 https:/ ...
- Flutter: provider 使用小部件的小部件构建的依赖注入系统
文档 dependencies: provider: import 'package:dart_printf/dart_printf.dart'; import 'package:flutter/ma ...
- golang官方嵌入文件到可执行程序
目录 前言 示例程序 嵌入文件直接访问 嵌入文件列表 总结 前言 在go官方出嵌入文件的方法前我在网上找过,并且自己还研究过,虽然没有问题,但是既然官方支持还是用起来吧. 看了下go源码embed/e ...
- django学习-9.windows系统安装mysql8教程
1.前言 mysql是最流行的关系型数据库管理系统之一,我们可以在本地windows环境下搭建一个mysql的环境,便于学习. 当前我采取的搭配是: windows7(window8和window10 ...
- 宝塔面板配置Let's Encrypt证书自动续签失效及解决方案
一.背景小故事 笔者手里有个朋友交给我去日常运维项目是PHP+微信小程序,部署在Linux系统上. 这个项目是用宝塔面板去进行日常的可视化运维管理,用起来蛮香的. 如不清楚宝塔的同学,可以自行了解,这 ...