1。静态 内部类不能访问外部类的非静态成员
2。静态内部类可以直接创建对象
3。如果静态内部类访问外部类中与本类内同名的成员变量或方法时,需要使用类名.的方式访问
1。静态 内部类不能访问外部类的非静态成员
2。静态内部类可以直接创建对象
3。如果静态内部类访问外部类中与本类内同名的成员变量或方法时,需要使用类名.的方式访问
数据结构包括三个方面
1:分支结构
2:顺序结构
3:循环结构
加一个超前知识: thread.sleep(5000),让它缓冲5秒
For的无限循环 可以直接for( ; ; ){
}
Random 和Scanner感觉差不多,都是要借下扫描器
Random ra = new Random();
Ra.nextInt(100);------这句话意思是随机生成1~100之间(不含)
Int
随机猜数字游戏,外挂---就是让他随即产生的数字并打印出来 才行
For循环更适合于明确循环次数或范围的场合中
While true表示无限循环
常用数据类型 初始值为0 或者0.0
引用数据类型 初始值为null
Int[][] brr = new int [2][6]
这个是二维数组的表达方式---2行 6列
Arr3[] = 20; 这个代表的给列空间的赋值 而不是申明空间
或者 int[][] brr = {{11,22,33,44},{55,66,77,88}}
这样来赋值,而不是申明空间
Jvm会在其内存空间中 开辟一个称之为 堆的存储空间 这部分空间
用于存储使用 new 关键字 创建的数组和对象
易错点arr[i] = arr[i - 1] 但是我之前写成了i来定位 事实上
Arr[i] 这个代表的数字 是关键信息
插入排序
For (int i = arr.length-1; i > 0; i++ ){
Arr[i] = arr[i-1]
}
Arr[0] = 55
数组的有缺点
优点:可以通过下标直接找到该数据
缺点:所有的数组类型相同
要求内存空间连续,并且长度一旦确定,就不能修改
增加和删除元素时 可能移动大量元素,效率都
增加功能,调取数据中的包
作用是表示将数组arr中下标从1开始的第三个元素拷贝到数组brr中
下标从0开始的位置
System. Arraycopy(arr, 1, brr, 0 ,3)-----这个不知道 用的多不多
使用Scanner的时候是交叉顺序
例如:Scanner input = new Scanner(System.in);
Int sth = input.nextint();
有机会了解了解 inport java.util Arrays这个包,主要作用是直接将数组
打印出来,而不是使用for循环,而且这个还能做到{1, 2, 3, 4}
带逗号和前后两个花括号,而不是分段用for循环再另外加上 才能处理
这里有好几个数组工具类的常用方法-------都是 这种 增加一个包,然后
用现成的数组结构 放进去
添加数据
Int[] [] arr = {{1,2,3,4},{5,6,7,8}};
类 在java语言中体现为一种引用数据类型
之前的数组,后面学习的类,都是引用数据类型,还有String 字符串 都是引用数据类型
类的实例化
创建对象也就是这个类的实例化 实体过程
当一个类定义完毕之后,可以使用new关键字来创建该类的对象,这个过程叫做类的实例化,
创建对象的本质,就是在内存空间堆区申请一块存储空间,用于存放该对象独有特征信息
这个主要针对 我们在创建一个 匿名对象(也就是没有命名的对象) 然后下次再找这个对象的时候,就会找不到,因此 我们需要用引用 来处理
只要我们拿数组或者类这样的变量定义,我们都可以叫做引用数据变量
引用数据变量主要用来记录 对象在堆区中的内存地址,便于下次访问
这个和之前的String 一样,都是引用数据类型
想明白了 原来引用的定义 就是为了产生内存地址
方便 能够直接找到堆区的信息
因此 都是 引用过来的,才会叫做引用
静态内部类的格式
访问修饰符 static class内部类的类名
内部类的类体;
内部类在当前类服务,对外不可见
普通内部类和普通类一样,可以定义成员变量、成员方法以及构造方法
普通内部类和普通类一样可以使用final或者abstract关键字修饰
普通内部类还可以使用private 或 protected关键字进行修饰
如果内部类访问外部类中与本类内部同名的成员变量或方法时,需要使用this关键字
普通(成员)内部类的格式
访问修饰符 class 内部类的类名{
内部类的类体;
}
内部类的基本概念
当一个类的定义出现在另一个类的类体中时,那么这个类叫做内部类Inner,而这个内部类所在的类叫做外部类Outer
类中的内容:成员变量、成员方法、构造方法、静态成员、构造块和静态代码块,内部类
实际作用:
当一个类存在的价值仅仅是为某一个类单独服务时,那么就可以将这个类定义为所服务类中的内部类,这样可以隐藏该类的实现细节并且可以方便的访问外部类的私有成员而不再需要提供公有的get和set方法
内部类的分类
普通内部类--直接将一个类的定义放在另外一个类的类体中
静态内部类-使用static关键字修饰的内部类,隶属于类层级
局部内部类--直接将一个类的定义放在方法体的内部时
匿名内部类--
接口与抽像类的主要区别
接口是一种特殊的抽象类
1、定义抽象类的关键字是abstract class
定义接口的关键字是interface
2、继承抽象类的关键字是extends ,而是实现接口的关键字是implement
接口对应着实现类
抽象类中增加方法时子类可以不用重写,而接口中增加方法时实现类需要重写
接口有很多实现类
很多实现类都用不到这些方法,重写了方法也没有意义。
给接口中新增了一个特性,
接口中允许出现私有方法
类和类之间的关系
使用extends关键字表达继承关
支持单继承
类和接口之间的关系
使用implements关键字表达实现关系
支持多实现
接口和接口之间的关系,使用extends关键字表达继承关系
支持多继承
接口中没有构造方法
如:
金属接口,货币接口,黄金类
java语言只能是单继承
类与类之间不支持多继承的
类与接口之间可以多继承,接口为java中多继承的不足
接口的基本概念
比如USB接口,tpye-c接口
用来连接各个事情的中间件
接口就是一种比抽象类,还抽象的类,体现在所有的方法都是抽象方法
接口是一种比抽像类还抽像的类。所有的方法都是抽像方法
定义类的关键字是class,而定义接口的关键字是interface
私有的方法不能被子类继承
抽象类的应用
银行有定期帐户,与活期账户。继承自账户类
public double getlixi(){}
抽像方法,账户为抽像类
子类继承父类的成员方法
抽象类的实际意义不在于创建对象而在于被继承
多态的概念
抽象类,指向 子类的对象
抽象方法的概念
抽像方法主要指不能具体实现的方法并且使用abstract关键字修饰,也就是没有方法体
具体格式如下:
访问权限 abstract 返回值类型 方法名(形参列表);
抽象方法没有方法体???那用于何处
public abstract void cry();
方法体没有办法写,方法还得存在
抽象类的概念
抽象类主要指不能具体实例化的类并且使用abstract关键字修饰,也就是不能创建对象
抽象类中可以有成员变量与成员方法、构造方法;
抽象类中可以没有抽象方法
拥有抽象方法的类必须是抽象类,因此真正意义上的抽象类,必须有抽象方法
如果一个抽象类中有了抽象方法
抽象类不能new对象,是因为有了抽象方法
抽象方法是没有方法体
编译阶段调父类
运行阶段调用子类
多态的实际意义
多态的意义在于屏蔽了不同子类的差异性实现通用的编程带来不同的效果
同一种事情,不同的形态
Shape s
s即可以表示矩形,又可以表示圆形