final关键字的概念与四种用法

final关键字代表最终,不可改变的

常见四种用法:

  1. 可以用来修饰一个类

    当前这个类不能有任何子类

  2. 可以用来修饰一个方法

    当final关键字用来修饰一个方法的时候,这个方法就是最终方法,也就是不能被覆盖重写

  3. 还可以用来修饰一个局部变量

    被修饰后,变量不可改变

  4. 还可以用来修饰一个成员变量

Java中有四种权限修饰符

​ public > protected > (default) > private

public protected default private
在同一个类中 YES YES YES YES
在同一个包中 YES YES YES NO
在不同包中,但存在继承关系 YES YES NO NO
在不同包中,不存在继承关系 YES NO NO NO

内部类

分类:

  1. 成员内部类
  2. 局部内部类

成员内部类的定义格式:

修饰符 class 外部类名{

修饰符 class 内部类{}

}

如何使用成员内部类?有两种方式

  1. 间接方式:在外部类的方法中,使用内部类,然后main只是调用外部类的方法

  2. 直接方式:公式

    外部类名称.内部类名称 对象名 = new 外部类().new 内部类();

    第一种间接使用方式

//定义一个成员内部类
public class Body{ public class Heart{
public void beat(){
System.out.println("我是内部类的方法+"+"心脏跳动......"+name);
}
}
public void methodBody(){
System.out.println("我是外部类的方法");
new Heart().beat();
}
//我是成员变量,内部类也可以访问我
private String name; public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
//使用内部类
public class BodyDemo{
public static void main(String[] args){
//间接使用
//创建对象调用方法,间接使用内部类
Body body = new Body();
body.methodBody();
//直接使用
Body.Heart heart = new Body().new Heart();
heart.beat();
}
}

内部类的同名变量的访问

public class Outer{
//创建一个内部类
int num = 10; public class Inner{
int num = 20;
public void methodInner(){
int num = 30;
System.out.println(num);
System.out.println(this.num);
System.out.println(Outer.this.num);
}
}
public void newInner(){
Inner inner = new Inner();
inner.methodInner();
}
}
public class OuterDemo{
public static void main(String[] args){
Outer outer = new Outer();
outer.newInner();
}
}

局部内部类

定义格式:

修饰符 class 外部类名称{

​ 修饰符 返回值类型 外部类方法名称(){

​ class 局部内部类名称{}

}

}

public class Outer{//外部类
public void methodOuter(){
//内部类
class Inner{
//内部类的成员变量
int num = 10;
//内部类的成员方法
public void methodInner(){
System.out.println(num);
}
}
//让局部变量在方法里直接使用
Inner inner = new Inner();
inner.methodInner();
}
}
public class OuterDemo{
public static void main(String[] args){
Outer outer = new Outer();
//局部内部类,存在于方法中,不能超出局部使用
//局部只属于当前所属的方法才可以使用他
outer.methodOuter();
}
}

匿名内部类

匿名内部类的定义格式:

接口名称 对象名 = new 接口名称(){覆盖重写所有的抽象方法};

public interface MyInterface {

public abstract void method1();

}
public class InterfaceDemo {
public static void main(String[] args) {
MyInterface myinterface = new MyInterface() {
public void method1() {
System.out.println("我是匿名内部类");
}
};
myinterface.method1();
}
}

类作为成员变量类型

//定义一个英雄类
public class Hero{
private int age;
private String name;
private Weapon code;
//手写的构造方法
public Hero(){}
public Hero(int age,String name,Weapon code){
this.age = age; this.name = name; this.code = code;
}
//设置get和set方法
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setWeapon(Weapon code){
this.code = code;
}
public Weapon GetWeapon(){
return code;
}
//英雄特与方法
public void attack(){
System.out.println(name+"手持"+code.getName()+"正在大杀四方,可怕的是他今年才"+age);
} }
public class Weapon{
private String name;//已经是多兰剑了
public Weapon(){}
public Weapon(String name){
this.name = name;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
//创建英雄吧
public class HeroDemo{
public static void main(String[] args){
Weapon weapon = new Weapon("多兰剑");
Hero hero = new Hero();
hero.setWeapon(weapon);
hero.setName("光辉女郎");
hero.setAge(20);
hero.attack();
}
}

接口作为成员变量类型

public class Hero{
private String name;
private Skill skill; public Hero(){}
public Hero(String name,Skill skill){
this.name = name;
this.skill = skill;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setSkill(Skill skill){
this.skill = skill;
}
public Skill getSkill(){
return skill;
} public void attack(){
System.out.println("我叫"+name+"开始释放技能");
//传递那个接口,就用哪一个接口去调用use技能
skill.use();
System.out.println("释放技能完成");
}
}
public interface Skill{
public abstract void use();
}
public class HeroDemo{
public static void main(String[] args){
Hero hero = new Hero();
hero.setName("艾希");
Skill skill = new Skill(){
public void use(){System.out.println("pia==pia===pia");}
};
hero.setSkill(skill);
hero.attack();
}
}

7天学完Java基础之6/7的更多相关文章

  1. 7天学完Java基础之0/7

    笔记-7天学完Java基础之0/7 1.常用命令提示符(cmd) 启动:Win+R,输入cmd​

  2. 简明易懂,将细节隐藏,面向新手树立web开发概念——学完Java基础语法,超快速上手springboot+mybatiJavaWeb开发

    简明易懂,将细节隐藏,面向新手树立web开发概念 --学完Java基础语法,超快速上手JavaWeb开发 Web本质(先忽视各种协议) Web应用可以理解为浏览器和服务器之间的交互. 我们可以看一个简 ...

  3. 7天学完Java基础之5/7

    接口 接口就是一种公共的规范标准 是一种引用数据类型 定义格式 public interface 接口名称{} java7 中接口可以包含常量,抽象方法:Java8 还可以额外包含默认方法,静态方法: ...

  4. 7天学完Java基础之4/7

    静态static 如果一个成员变量使用了static关键字,那么这个变量不再属于对象自己,而是属于所在的类,多个对象共享同一份数据 静态static 关键字修饰成员变量 public class St ...

  5. 7天学完Java基础之7/7

    Object类的toString方法 类Object是类层次结构的根类 每个都使用Object作为超类 所有对象都实现这个类的方法 //这个是Object类的子类,实现了其所有方法 public cl ...

  6. 7天学完Java基础之3/7

    API概述 什么叫做API? API(Application Programming lnterface),应用程序编程接口. 所谓API就是值好多的类,好多的方法,JDK给我们提供了很多现成的类,我 ...

  7. 7天学完Java基础之1/7

    方法重载 package cn.itcat.day04.demo01; //方法重载就是参数个数不同,参数类型不同,参数类型的顺序不同 //方法重载与参数名称无关,与方法返回值类型无关 //方法重载方 ...

  8. 7天学完Java基础之2/7

    面向对象 面向对象的思想就是值我们要实现一个共功能的时候,我们不自己去做,而是找别人帮我们去做,帮我们去做的这个人就是对象.面向对象强调的是谁来帮我实现这个功能. 类与对象的关系 类:是一组相关属性和 ...

  9. 学完 JAVA SE后学什么 。。。

    我觉得学习j2ee一定要循序渐进,千万不要太急了.把java基础打牢一点,再牢一点.各位,你们在后面学习什么 struts,hibernate,spring,ajax..都很轻松. 第一个阶段(jav ...

随机推荐

  1. 利用卷积神经网络(CNN)构造社区问答系统

    /* 版权声明:能够随意转载,转载时请标明文章原始出处和作者信息 .*/                                                     author: 张俊林 ...

  2. Java字符串String 集合的迭代器

    Java字符串String 我们知道Java的字符窜是Immutable(不可变)的,一旦创建就不能更改其内容了:平常我们对字符串的操作是最多的,其实对字符串的操作,返回的字符串都是新建的字符串对象, ...

  3. AMD的ARM之路前景几何?

    http://server.zdnet.com.cn/all-2129330.html#2129333 AMD将于2014年推出基于ARM架构的Opteron(皓龙)处理器,应该是最近一段时间在IT产 ...

  4. oracle 11G direct path read 非常美也非常伤人

    direct path read 在11g中,全表扫描可能使用direct path read方式,绕过buffer cache,这种全表扫描就是物理读了. 在10g中,都是通过gc buffer来读 ...

  5. CSP:使用CryptoAPI解码X509证书内容

    微软的CryptoAPI提供了一套解码X509证书的函数,一个X509证书解码之后,得到一个PCCERT_CONTEXT类型的结构体指针. 通过该结构体,我们就能够获取想要的证书项和属性等. X509 ...

  6. iOS--判断字符串NSString中数字、中文、大小写英文

    iOS--判断字符串NSString中数字.中文.大小写英文   <iframe id="iframeu2051914_0" src="http://pos.bai ...

  7. 基于第三方微信授权登录的iOS代码分析

    本文转载至 http://www.cocoachina.com/ios/20140922/9715.html 微信已经深入到每一个APP的缝隙,最常用的莫过分享和登录了,接下来就以代码的形式来展开微信 ...

  8. Java,多个线程对同一个数据源的访问

    当多个线程对同一个数据源进行访问时,应对线程同步或加锁.为何?举个简单的例子:有一个共享的数据源dataSource,其值为0.有两个线程,Thread1和Thread2.Thread1的任务是将da ...

  9. QT下QThread学习(二)

    学习QThread主要是为了仿照VC下的FTP服务器写个QT版本.不多说,上图. FTP服务器的软件结构在上面的分析中就已经解释了,今天要解决的就是让每一个客户端的处理过程都可以按一个线程来单独跑.先 ...

  10. linux内核的三种主要调度策略

    linux内核的三种主要调度策略: 1,SCHED_OTHER 分时调度策略, 2,SCHED_FIFO实时调度策略,先到先服务 3,SCHED_RR实时调度策略,时间片轮转 实时进程将得到优先调用, ...