Java类包

Java JDK API中提供了类功能,它们封装为类包

类名冲突

JDK API 中提供的类,在同一类包 同类名 会导致编译器无法执行 ,要把类包分开或更改类名

完整的类路径

完整的类名需要包名与类名的组合

java.包名.类名
//例子
java.lang.String

如果指定路径不确定可能会翻车,像以下是需要完整路径
java.util.Date date = new java.util.Date();
java.sql.Date date2 = new java.sql.Date();

java包是为了防止命名冲突,访问控制,提供搜索和定位类、接口、枚举和注释等

没有定义包会自动归纳在预设包(默认包)中,最好为所有类设置包名(良好习惯)

package 包名

注意:

  • 在类中指定包名时,需要将 package 表达式 放在程序的第一行,必须是,非注释代码

  • Java包的命名规则是全部使用小写字母的

import 关键字导入包

引入包可以调用包中的方法,不能调用两包中的同类名,指定包后面有 * ,代表使用包中的所有类

默认包中的类

import noa.out;public class Demo {public static void main(String[] args) {out a = new out();a.show();nob.out2 b = new nob.out2();b.show();}
}

noa包 中的 out类

package noa;public class out {public void show(){System.out.println("测试1"); }}

nob包 中的 out2类

package nob;public class out2 {public void show(){System.out.println("测试2"); }
}

运行结果

测试1
测试2

import 关键字导入静态成员

import static 静态成员

例子:

java.lang.System 类中的out成员变量
java.lang.Math 类中的max成员方法

它们都是静态成员,这是前提!!!

import static java.lang.System.out; //导入静态成员方法
import static java.lang.Math.max;   //导入静态成员变量public class Demo2 {public static void main(String[] args) {//静态成员简写调用out.println("123");System.out.println("123");//静态方法简写调用out.println("max(3,4)?"+max(3,4));out.println("max(3,4)?"+Math.max(3,4));}
}

运行结果

123
123
max(3,4)?4
max(3,4)?4

final关键字

final变量

final 声明的变量,设定后,不能更改该变量的值,被final设置的变量称为常量!!

final 数据类型 变量名 = 值;

final方法

final 定义的方法,不能被其他子类重写该方法

用private修饰符(限于本类使用)修饰的方法隐式被指定为 final类型 ,可不需再定义 final 类型

[修饰符] final 数据类型 方法名([参数]){···}

final类

final 定义的类,不能被继承 (跟部分API类类似)

final class 类名{···}

final定义

变量 不能被更改

方法 不能被重写

类 不能被继承

例子

public class Demo {//final变量   常量IPfinal double IP = 3.14;public static void main(String[] args) {//        IP = 3.143;不能赋值更改no1 n = new no1();n.show();
//        n.show2();不能访问no2 n2 = new no2();n.show();//调用继承父类的方法
//        n.show2();不能访问}
}class no1{//show() final方法public final void show(){System.out.println("测试1");}private void show2(){System.out.println("测试2");}}//no3 final类
final class no2 extends no1{/*不能重写 父类show()方法public void show(){System.out.println("测试1");}*/private final void show2(){System.out.println("测试2");}
}//class no3 extends no2{····}不能继承

运行结果

测试1
测试1

内部类

一个类中再定义一个类,在类中再定义的类 称为内部类

成员内部类

可直接使用所在的类中的成员方法 / 成员变量

注意:

  • 在外部类外和非静态方法外实例内部类对象,需要外部类指定该对象的类型
  • 访问 被 private修饰的内部类方法,需要接口重写调用
  • this关键字调用本类的成员变量,外类需要类名作为前缀。如果多类需要完整的类路径

1.内部类调用外部类变量和方法及 private修饰 的访问

public class Demo {public int i = 123;private int j = 345;class Demoo{//        int i = 456;public void show(){//共用外类的变量System.out.println("调用内部类(Demo2)的show()方法输出i , j:"+i+"、"+j);}public void ssc(){System.out.println("在内部类调用外类ss()方法");//调用外类的ss()方法Demo.this.ss();System.out.println("\n在内部类调用外类sss()方法");//调用外类的sss()方法Demo.this.sss();}}public void show(){System.out.println("调用Demo类的show()方法输出i , j:"+i+"、"+j);}//public 修饰的外部类方法public void ss(){System.out.println("调用sss()方法,public修饰");}//private 修饰的外部类方法private void sss(){System.out.println("调用ss()方法,private修饰");}//在外部类实例化内部类对象引用Demoo n3 = new Demoo();public static void main(String[] args) {System.out.println("内部类的变量使用以及比较:");Demo n = new Demo();n.show();
//        Demo2 n2 = new Demo2(); 无法引用Demo.Demoo n2 = n.new Demoo();n2.show();System.out.println("\n内部类的方法调用:");n2.ssc();}
}

运行结果

内部类的变量使用以及比较:
调用Demo类的show()方法输出i , j:123、345
调用内部类(Demo2)的show()方法输出i , j:123、345内部类的方法调用:
在内部类调用外类ss()方法
调用sss()方法,public修饰在内部类调用外类sss()方法
调用ss()方法,private修饰

2.private修饰的内部类向上转型为接口

能隐藏内部类方法运行情况,但仅限于接口抽象方法重写的访问

interface nn{void f();
}public class Demo2 {public static void main(String[] args) {System.out.println("no1类使用隐藏内部类的方法:");no1 cc = new no1();//通过no1类doit()方法返回 nn接口nn cc2 = cc.doit("Java");cc2.f();
//        cc2.f2();仅限于接口抽象方法的访问}
}class no1{//隐式内部类private class no2 implements nn{//内部类的构造方法no2(String s){System.out.println("隐藏内部类获取的字符串:"+s);}//重写接口方法@Overridepublic void f() {System.out.println("调用隐藏内部类接口f()方法");}public void f2(){System.out.println("测试内部类的方法的访问");}}//返回接口 ,实例化内部类public nn doit(String str){return new no2(str);}
}

运行结果

no1类使用隐藏内部类的方法:
隐藏内部类获取的字符串:Java
调用隐藏内部类接口f()方法

3.使用 this 获取内部类与外部类的引用

interface D3nn {public void out(int i);
}public class Demo3{private int i = 88;private class Demoo3 implements D3nn{private int i = 99;@Overridepublic void out(int i){System.out.println("参数i:"+i);System.out.println("内部类i:"+this.i);System.out.println("外部类i:"+Demo3.this.i);}}public D3nn doit(){return new Demoo3();}
}class diao{public static void main(String[] args) {//实例化外部类Demo3 n = new Demo3();//通过外部类doit()方法获取接口调用内部类重写方法D3nn n2 = n.doit();n2.out(66);}
}

运行结果

参数i:66
内部类i:99
外部类i:88

局部内部类

类定义在方法或任意的作用域中均可定义为内部类

方法不能访问内部类,但内部类可以访问当前方法的常量以及所有成员

//定义接口
interface D4nn{ }public class Demo4 {//doit方法返回接口调用public D4nn doit(String s){class Demoo4 implements D4nn{//内部类的构造方法public Demoo4(String x) {//外部类方法参数覆盖内容x = s;//内部类获取的参数System.out.println(x);}}//返回内部类对象return new Demoo4("参数测试22");}//主方法调用方法public static void main(String[] args) {Demo4 n = new Demo4();n.doit("参数测试11");}}

运行结果

参数测试11

匿名内部类

匿名内部类没有名称,默认使用构造方法接口对象,匿名定义结束要有分号标识

//定义接口
interface D5nn{public void Demoo5(String x);
}public class Demo5 {public D5nn doit(String s){return new D5nn(){//内部类的构造方法@Overridepublic void Demoo5(String x) {//外部类方法参数覆盖内容x = s;//内部类获取的参数System.out.println(x);}};}public static void main(String[] args) {Demo5 n = new Demo5();D5nn  n2 = n.doit("参数匿名类");n2.Demoo5("参数匿名类2");}}

运行结果

参数匿名类

静态内部类

内部类前面加static关键字即可,变成静态内部类,静态内部类只能调用静态的成员,用于调试

  • 如果创建静态内部类对象,不需要外部类的对象
  • 不能从静态内部类的对象中访问非静态外部类的对象
//静态内部类public class Demo6 {int i = 11;static int i2 = 22;static class Demoo6 {public Demoo6(){//            System.out.println(i);无法打印i ,i非静态System.out.println(i2);}//内部类里写主方法 !! 用于测试内部类public static void main(String[] args) {Demoo6 n = new Demoo6();}}}

运行结果

22

内部类继承

内部类继承相对较复杂,需要设置专门的语法完成

继承内部类时,必须有构造方法带参数的,参数是内部类的外部类对象,同时构造方法里有使用 a.super() 语句

public class Demo7 {//内部类public class Demoo7{public void gg(){ }}public static void main(String[] args) {cs n = new cs(new Demo7());n.gg();}}//cs 继承 Demoo7内部类
class cs extends Demo7.Demoo7{//构造方法的参数是外部类的对象public cs(Demo7 d){d.super();}@Overridepublic void gg() {System.out.println("测试");}}

运行结果

测试

Java学习记录 类的高级特性篇相关推荐

  1. 视频教程-Java学习指南(Swing高级篇)-Java

    Java学习指南(Swing高级篇) 邵发,清华大学毕业,从业软件开发十余年,自2015年起致力于C/C++/Java等基础教育领域,希望能通过提高每一个个体的素质来推动中国IT业的整体发展.代表作: ...

  2. java多线程阶乘_【java学习记录】11.用多线程实现阶乘的计算过程和结果的读取(thread类ReadThread )...

    (源码在上传的压缩包"[java学习记录]11.多线程实现阶乘计算(Thread类和Runnable接口)"中可看到,该压缩包可下载)java * 采用Thread类的子类实现线程 ...

  3. 尚硅谷《MySQL高级特性篇》教程发布

    MySQL底层如何组织设计数据 怎么理解"索引即数据,数据即索引" 海量数据和高并发场景下如何设计主键 索引下推.覆盖索引对优化有什么优势 如何保证主从一致性 MVCC如何解决可重 ...

  4. Java学习记录五(多线程、网络编程、Lambda表达式和接口组成更新)

    Java学习记录五(多线程.网络编程.Lambda表达式和接口组成更新) Java 25.多线程 25.1实现多线程 25.1.1进程 25.1.2线程 25.1.3多线程的实现 25.1.4设置和获 ...

  5. java学习记录十五:集合二Collections、Set、Map

    java学习记录十五:集合二 一.Collections工具类 一.解释 二.常用方法 1.打乱集合顺序 2.按照默认规则排序 3.按指定规则排序 4.批量添加元素 二.可变参数 一.解释 二.写法 ...

  6. java学习记录16-反射

    java学习记录 一.什么叫反射? 二.测试class类的创建方式有哪些 三.类加载内存分析 加载->链接->初始化 四.分析类的初始化 五.获得类的信息 六.动态的创建对象,通过反射 七 ...

  7. Java学习记录02

    Java学习记录02 在学习中,博客的书写不可缺少,相应的markdown基本语法也要掌握,下面是自己在CSDN上查找并学习的链接:Markdown语法 2.6项目实训:基于控制台设计简易打折与累加计 ...

  8. Java学习记录_1:MOOC《零基础学Java语言》课后习题解

    Hey,我是寒水,一名大二学生,电子商务专业在读,正在学习Java中.我试图将在Java学习中遇到的一些困惑和最终的解答发在这个账号上,希望以此来激励我不要放弃学习! 在学习记录这个专题中,我收藏一些 ...

  9. 华为架构师撰写的Netty核心笔记,从Java NIO到Netty的高级特性

    众所周知,Netty 作为当前流行的 NIO 框架,操作省时.省事还安全,在云计算.大数据通讯,电商.游戏等领域都有广泛的应用.如果是一个大型网站,内部接口非常多的情况下,好处很明显--首先就是长链接 ...

最新文章

  1. vc6.0 记录一些常见问题的解决方案
  2. boost::filesystem模块打印文件的大小的测试程序
  3. 6、Qt Meta Object system 学习
  4. iOS之本地推送通知使用介绍
  5. C语言、嵌入式重点知识:回调函数
  6. 弹出选择文件夹的对话框 BROWSEINFO 的用法【MFC】
  7. 在Eclipse新建菜单中添加菜单项,其他地方添加菜单项类似
  8. html简单用户登录界面_简单实现 nginx 用户登录认证
  9. 基于VMware应用环境的备份恢复解决方案思路
  10. nodejs使用supervisor插件调试效率
  11. C++ Primer 5th 第15章 面向对象程序设计
  12. haneWin NFS服务器配置
  13. 计算机房图怎么画,机房CAD图纸的画法教程
  14. Win10企业版转专业版
  15. 【错误记录】Google Play 上架报错 ( 对于在 APK 中使用该权限的应用,您必须设置隐私权政策 | 生成并托管 隐私政策 )
  16. Springcloud 介绍 和 Eureka的使用
  17. CSDN竞赛—第六期题解与感想
  18. 你对锁的理解?如何手动模拟一个死锁?
  19. 微软与索尼赋能计划已启动,旨共同创造新技术生态系统
  20. AE+VS+c#开发颜色符号系统之统计符号化(八)符号化完结篇

热门文章

  1. word停止工作 怎么解决
  2. Spring IOC 和 DI原理 (面试必备)
  3. windows98雨林木风_黄山第72座峰的召唤,云端上的茶园山庄,等风等雨等你来
  4. python docx 合并文档 图片_MBT文档模型化生成工具——30倍效率文档撰写工程化方法...
  5. 四阶行列式计算python_四阶行列式的计算题?
  6. linux终端实现骇客帝国的字符雨动画
  7. 【淘宝SEO技巧】淘宝宝贝标题关键字优化
  8. android 内存不足警告,安卓手机老是提示内存不足怎么办
  9. 图片文字怎么转换成Word文档?教你两招快速解决
  10. 蛊惑者马云发家史(曾推毛氏运动唐僧团队)三