Java的static,final,代码块,内部类,抽象类,接口等

          Java的static,final,代码块,内部类,抽象类,接口等

 

1 static关键字月final关键字

1.1 static

static表示静态。可以修饰属性,方法,代码块内部类等,总结如下:

 特点
修饰属性

①属于类,调用方式:类名.属性;

②属于所有对象的公共属性:对象.属性;

③类变量在类加载的时候就会加载,而且只有一份;

④类变量存储在静态域中;

⑤生命周期比成员变量长。

修饰方法

①在类加载的时候加载;

②调用:类名.方法();

③static修饰的方法叫静态方法,静态方法只能调用静态成员,不能调用非静态成员;非静态方法可以调用静态方法也可以调用非静态方法;

④在static修饰的方法不能出现this或super关键字。

修饰代码块

①static修饰的代码块叫静态代码块,在类加载的时候自动执行,给类进行初始化,而且只执行一次;

②一个类中可以定义多个静态代码块,按顺序执行;

③静态代码块只能访问类的静态成员,而不允许访问实例成员。

修饰内部类static修饰内部类。普通类是不允许声明为静态的,只有内部类才可以。被static修饰的内部类可以直接作为一个普通类来使用,而不需先实例一个外部类。

1.2 final

final可以修饰属性,方法,类,总结如下:

 特点
修饰类(final class 类名{})表示该类是一个最终类,不能被继承
修饰方法(final 返回值类型 方法名())表示该方法不能重写
修饰属性(final 属性类型 属性名)表示一个常量,常量一般用大写字母表示

给常量初始化:(1)显示初始化赋值  final  类型  变量名  =  值;

(2)静态块  static{}

(3)构造块进行初始化   {}

(4)构造器进行初始化   在构造器中赋值

 

2 代码块

定义:用大括号“{}”将多行代码封装在一起,形成一个独立的代码区,这就构成了代码块。

分类如下:

(1)普通代码块:方法的{} / if(){}  /  在方法里面{局部代码块}

(2)构造代码块:{} 写在类中,在构造器前执行,创建一次对象就会调用一次(可多次执行)

(3)静态代码块:static{}在类加载时执行,而且只执行一次,会在构造器前执行

(4)同步代码块:在方法 synchronized(锁对象){}

 

3 抽象类和抽象方法

概念:用abstract修饰的类就是抽象类(类的修饰符:final/abstract)。

抽象方法:用abstract修饰的方法就是抽象方法

特点:

(1)抽象类不能被实例化(不能直接创建对象),是用来继承的;

(2)抽象类中可以有构造器;

(3)抽象类中可以有抽象方法也可以有非抽象方法;

(4)抽象方法不能具体实现(即没有方法体);

(5)有抽象方法的类一定是抽象类,抽象类不一定要有抽象方法;

(6)抽象方法必须被继承的子类重写(除非子类也是抽象类,可以不用重写父类的抽象方法;)

(7)final(不能继承的)和abstract(用来继承的)不能同时修饰一个类和类

public  class Test {public static void main(String[] args) {//Animal a = new Animal();
//		Animal a = new Dog("旺财",5,"公");
//		a.eat();Test t = new Test();t.manager(new Dog("旺旺",2,"公"));t.manager(new Cat("猫咪",3));}public void manager(Animal a) {a.eat();a.run();}
}
abstract class Animal{String name;int age;public Animal() {super();}public Animal(String name, int age) {super();this.name = name;this.age = age;}//吃public abstract void eat();public abstract void run();
//	public void show() {
//		System.out.println();
//	}}
class Dog extends Animal{String sex;public Dog(String name,int age,String sex) {super(name,age);this.sex = sex;}@Overridepublic void eat() {System.out.println("够吃骨头");}@Overridepublic void run() {}}
class Cat extends Animal{public Cat(String name,int age) {super(name,age);}@Overridepublic void eat() {System.out.println("猫吃鱼");}@Overridepublic void run() {}}

(8)abstract与static(静态的),不能同时修饰一个方法。声明static说明可以直接用类名调用该方法;声明abstract说明需要子类重写该方法;如果同时声明static和abstract,用类名调用一个抽象方法肯定不行

 

4 接口

概念:Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

定义语法:访问权限修饰符 interface 接口{}

特点:

(1)接口也是一个特殊的抽象类(不可以直接实例化),可以包含常量和抽象方法;

(2)还可以包含静态方法和默认方法(jdk1.8之后的特性);

(3)接口不可以定义构造器;

(4)实现接口的类必须重写接口的非抽象方法;

(5)类可以实现(implements)多个接口(避免类的单继承不足问题);

(6)接口是多继承(extends)的。

常量默认[public static final]
public static final int n=10;int m = 11;
抽象方法默认:[public abstract]
public abstract void show1();void show();//一下两个为jdk1.8的新特性
//静态方法 static void show2() {System.out.println("接口中的静态方法");}//实现接口子类去重写(对象)default void show3() {System.out.println("默认的方法");}

 

作用:接口就是一种实现功能(定义功能_方法),定义规范。

/*** @Description 定义USB接口 实现其功能 start() stop();* @author refuel* @version v1.0*/
public class Test {public static void main(String[] args) {//方式1 普通创建电脑对象调用Computer1 c = new Computer1();c.Work(new CardReader());//方式2 匿名类的对象USB u = new USB() {@Overridepublic void start() {System.out.println("匿名类的对象开始");}@Overridepublic void stop() {System.out.println("匿名类的对象结束");}};c.Work(u);//方式3 匿名类的匿名对象c.Work(new USB() {@Overridepublic void start() {System.out.println("匿名类的匿名对象结束");}@Overridepublic void stop() {System.out.println("匿名类的匿名对象结束");}});}
}
interface USB {void start();void stop();
}
class Printer implements USB{@Overridepublic void start() {System.out.println("打印机工作");}@Overridepublic void stop() {System.out.println("打印机停止工作");}}
class CardReader implements USB {@Overridepublic void start() {System.out.println("读卡器工作");}@Overridepublic void stop() {System.out.println("读卡器停止工作");}}
class Computer1 {public void Work(USB u) {u.start();u.stop();}
}

 

5 内部类

概念:允许一个类的定义位于另一个类的内部,前者为内部类,后者为外部类。

分类:

(1)成员内部类(类中):①分为静态和非静态的成员内部类②定义在类的内部,方法外③四个权限修饰符,static、final、abstract可以其进行修饰④非静态成员内部类:1. 外部类 外部类对象 = new 外部类(); 2. 外部类.内部类 内部类对象=外部类对象.new 内部类名();      静态成员内部类:外部类.内部类名 内部类对象 = new 外部类.内部类名();

(2)局部内部类:①局部内部类定义在方法中②定义局部内部类的方法一般有一个返回值(局部内部类的父类类型),返回局部内部类型的对象。

public class Test1 {public static void main(String[] args) {//原始方式实现输出产品的名称和颜色Product p = new RedPen();p.getColor();System.out.println(p.getName());//局部内部类实现输出产品的名称和颜色Test1 t = new Test1();t.getProduct().getColor();System.out.println(t.getProduct().getName());}public Product getProduct() {//局部内部类
//		class BlackPen implements Product {
//			@Override
//			public String getName() {
//				
//				return "黑笔";
//			}
//
//			@Override
//			public void getColor() {
//				System.out.println("黑色");
//			}			
//		}
//		return new BlackPen();//匿名内部类的匿名对象return new Product() {@Overridepublic String getName() {return "蓝笔";}@Overridepublic void getColor() {System.out.println("蓝色");}};}}interface Product {String getName();void getColor();
}
class RedPen implements Product {@Overridepublic String getName() {return "红笔";}@Overridepublic void getColor() {System.out.println("虹色");}}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用parted划分GPT分区(转)

parted命令可以划分单个分区大于2T的GPT格式的分区,也可以划分普通的MBR分区,fdisk命令对于大于2T的分区无法划分,所以用fdisk无法看到parted划分的GPT格式的分区。 Parted 命令分为两种模式:命令行模式和交互模式。 1、命令行模式…

04.卷积神经网络 W4.特殊应用:人脸识别和神经风格转换(作业:快乐屋人脸识别+图片风格转换)

文章目录作业1:快乐房子 - 人脸识别0. 朴素人脸验证1. 编码人脸图片1.1 使用卷积网络编码1.2 Triplet 损失2. 加载训练过的模型3. 使用模型3.1 人脸验证3.2 人脸识别作业2:神经风格转换1. 问题背景2. 迁移学习3. 神经风格转换3.1 计算内容损失3.2 计算风…

javascript练习题

1.用typeof bar”object”判断bar是否是一个object的潜在缺陷是什么?怎样才能避免这种缺陷? 答:尽管用typeof bar”object”是一个判断bar是一个object的可靠方法,但是令人惊讶的是,在JavaScript中null也是一个object!…

Maven3路程(三)用Maven创建第一个web项目(1)

一.创建项目 1.Eclipse中用Maven创建项目 上图中Next 2.继续Next 3.选maven-archetype-webapp后,next 4.填写相应的信息,Packaged是默认创建一个包,不写也可以 5.创建好项目后,目录如下: 至此,项目已经创建…

java基础之设计模式

1 设置模式之单例设计模式 概念:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 (1)饿汉式: /*** Description 饿汉式* author refuel* version v1.0*/ public class TestSingleton{public static void ma…

数组排序(冒泡、排序)

目前对于数组的排序有主要的两种,一种是选择排序,一种是冒泡排序。当然大学学过数据结构的知道,还有一些其他的排序,这里就不说明了,有时间自己上网查查。其实排序在开发中并不常用, 我们学习它是学一种思想…

LeetCode 1598. 文件夹操作日志搜集器

文章目录1. 题目2. 解题1. 题目 每当用户执行变更文件夹操作时,LeetCode 文件系统都会保存一条日志记录。 下面给出对变更操作的说明: "../" :移动到当前文件夹的父文件夹。如果已经在主文件夹下,则 继续停留在当前文…

Java集合Set,List和Map等

Java集合Set,List和Map等 1 Java集合框架 因为Java是面向对象的语言,对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端 。Java集合就像一个容器&#x…

利用bootstrap框架做了一个采摘节节日活动网页

效果欣赏如下&#xff1a; 总共主要是一下两个块代码&#xff1a; 1.主题&#xff1a; <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"width, initial-scale1.0&qu…

FC网络学习笔记02 -网络配置方法

随着新一代飞机的综合化航电系统对通信需求的不断提高&#xff0c;传统的ARINC429、1553B总线的传输速率分别只有100Kbps和1Mbps&#xff0c;其带宽已远远不 论文联盟 http://Www.LWlm.cOm能满足系统通信的需求&#xff0c;无法为高性能数据处理提供有力的通信支撑。 FC网络是…

LeetCode 1599. 经营摩天轮的最大利润(模拟)

文章目录1. 题目2. 解题1. 题目 你正在经营一座摩天轮&#xff0c;该摩天轮共有 4 个座舱 &#xff0c;每个座舱 最多可以容纳 4 位游客 。你可以 逆时针 轮转座舱&#xff0c;但每次轮转都需要支付一定的运行成本 runningCost 。摩天轮每次轮转都恰好转动 1 / 4 周。 给你一…

1.数据库基本概念知识

数据库 存储数据的仓库 描述一个事物的基本信息 优点: 持久化存储 读写速度极高 保证数据的有效性 RDBMS 当前主要使用两种类型的数据库&#xff1a;关系型数据库、非关系型数据库 所谓的关系型数据库RDBMS&#xff0c;是建立在关系模型基础上的数据库&#xff0c;借助于…

LeetCode 1600. 皇位继承顺序(图的深度优先遍历)

文章目录1. 题目2. 解题1. 题目 一个王国里住着国王、他的孩子们、他的孙子们等等。每一个时间点&#xff0c;这个家庭里有人出生也有人死亡。 这个王国有一个明确规定的皇位继承顺序&#xff0c;第一继承人总是国王自己。我们定义递归函数 Successor(x, curOrder) &#xff…

Java泛型,枚举,注解

Java泛型&#xff0c;枚举&#xff0c;注解 1 泛型 1.1 什么是泛型 泛型&#xff1a;即参数化类型。在不创建新的类型的情况下&#xff0c;通过泛型指定的不同类型来控制形参具体限制的类型。允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值…

2.数据完整性

使用数据类型的原则是&#xff1a;够用就行&#xff0c;尽量使用取值范围小的&#xff0c;而不用大的&#xff0c;这样可以更多的节省存储空间 常用数据类型如下&#xff1a; 整数&#xff1a;int&#xff0c;bit 小数&#xff1a;decimal 字符串&#xff1a;varchar,char 日期…

LeetCode 1601. 最多可达成的换楼请求数目(回溯+剪枝)

文章目录1. 题目2. 解题1. 题目 我们有 n 栋楼&#xff0c;编号从 0 到 n - 1 。每栋楼有若干员工。由于现在是换楼的季节&#xff0c;部分员工想要换一栋楼居住。 给你一个数组 requests &#xff0c;其中 requests[i] [fromi, toi] &#xff0c;表示一个员工请求从编号为 …

3.数据库基本操作

数据库操作&#xff1a; 查看所有数据库 show databases; 使用数据库 use 数据库名; 查看当前使用的数据库 select database(); 创建数据库 create database 数据库名charsetutf8; 例&#xff1a;create database python charsetutf8; 删除数据库 drop database 数据库名…

Nginx + PHP(php-fpm)遇到的502 Bad Gateway错误

我一个统计程序估计要跑1分多钟以上 查看了一个php-fpm 配置文件 [13-Oct-2013 12:06:07] WARNING: [pool www] child 7458, script /home/wwwroot/admin/index.php (request: "GET /index.php") execution timed out (101.515909 sec), terminating [13-Oct-2013 12…

4.数据库(增删改查)备份及恢复

查询所有列 select * from 表名; 例&#xff1a;select * from classes; 查询指定列&#xff0c;可以使用as为列或表指定别名 select 列1,列2,...from 表名; 例&#xff1a;select id,name from classes; 增加 全列插入&#xff1a;值的顺序与表中字段的顺序对应 insert in…

LeetCode 767. 重构字符串(堆)

文章目录1. 题目2. 解题1. 题目 给定一个字符串S&#xff0c;检查是否能重新排布其中的字母&#xff0c;使得两相邻的字符不同。 若可行&#xff0c;输出任意可行的结果。若不可行&#xff0c;返回空字符串。 示例 1: 输入: S "aab" 输出: "aba"示例 2…