2018.7.22
作者:小孟鱼
java中包的知识
- 包的三大作用
- 区分相同名字的类
- 当类很多时,可以很好的管理类
- 控制访问范围
- 包-打包命令
Package com.jiangyu;
三.命名规范
小写字母 例如:com.sina.jiangyu
- 常用的包
long包 net包..........
继承
- 子类最多只能继承一个父类(指直接继承)
- java中所有类都是Object类的子类
- JDK6中202个包3777个类,接口,异常,枚举,注释和错误
- 在做开发时,多用API
- 在使用类的时候,问Google大神
方法的重载
- 方法名相同
- 方法的参数类型,个数,顺序至少有一项不同
- 方法返回类型可以不同
- 方法的修饰符可以不同
方法的覆盖
- 子类方法的返回类型,参数,方法名称,要和父类的
返回类型,参数,方法名称完全一样,否则编译错误
- 子类方法不能缩小父类方法的访问权限
抽象类
- 抽象类在java中一个比较重要的类
注意:
- 用abstract 关键字修饰一个类,这个类叫抽象类
- 用abstract关键字修饰一个方法时,这个方法就是抽象方法
- 抽象类不能实例化
- 抽象类不一定包含abstract方法。也就是说,抽象类
可以没有abstract方法
- 一旦类包含abstract方法,则这个类必须声明abstract
- 抽象方法不能有主体,如图所示:
Abstract void aaa(){ }//错误
- 抽象类里面可以有拥有实现的方法
8.当一个子类继承的父类是抽象类的话
按照java语法规定需要我们把抽象类的所有抽象方法全部实现
接口
- 接口不能实例化
- 接口中的所有方法都不能有主体,图示:
Void aaa(){ }//错误
- 一个类可以实现多个接口
- 接口可以有变量【但变量不能用private和protected修饰】但必须给变量初始化
关于这一点我还想说
a接口中的变量,本质上都是static的,而且是final类型,不管你加不加static修饰
b在java开发中,我们经常把经常用的变量,定义在接口中,作为
全局变量使用。访问形式:接口名.变量名//System.out.println(Usb.a);
- 一个接口不能继承其他类,但是可以继承别的接口
6.编写一个相机类,并实现Usb接口一个重要的原则:当一个类实现一个接口,就要求该类把这个接口的所有方法,通通实现
public class Demo1 {
static int i=1;
//静态区域块
//静态代码区只执行一次
static
{
//该静态区域块只执行一次
System.out.println("a");//测试执行的次数
i++;
}//静态的只初始化一次,静态变量共享一个内存引用
public Demo1(){
System.out.println("b");//测试执行的次数
i++;
}
public static void main(String[] args) {
Demo1 t1=new Demo1();
System.out.println(t1.i);
Demo1 t2=new Demo1();
System.out.println(t2.i);
}
}
public class Classmate
{
public static void main(String[] args)
{
// int num;
// num = 30;
// System.out.println("我们班共有"+num+"个学生");
//在java中,对char类型运算时,直接当做sacii码进行运算就可以了!
//char test1 = 'a'+28;
//System.out.println(test1);
// int a=25;
// a=45;
// System.out.println("a="+a);
//这样就违背从高精度到低精度转的原则
//bate<short<int<long<float<double(高精度赋值给低精度是错误的)
//int a=1.2(错误的);
//结论:数据类型只能从低精度->高精度转换
//在java中小数默认为double类型
// double a=3;//(低精度的值可以赋值给高精度是正确的)
// float b=3.4f;
// System.out.println("b="+b);
// int a=1;
// double b=4.2;
// //a=b(错误不能高精度赋值给低精度);---->>>>应该是a=(int)b;
// a=(int)b;
// b=a;
// System.out.println("b="+b+"a="+a);
int a=3;
int b=(int) (a+4.5);//结论:当一个int数据和一个double数据相加时运算结果向高精度转换
System.out.println(b);
}
}
final -概念
final可以修饰变量或者方法
1.当不希望父类的某个方法被子类覆盖(override)时,可以用final修饰
2.当不希望类的某个变量的值被修改,可以使用final修饰,如果一个变量
是final ,则必须赋初值 。
3.当不希望类被继承是,可以用final修饰
4.某种方法用final修饰,则表示不可以被修改,不可以被覆盖
注意事项
1.final修饰的变量又叫常量,一般用xx_xx_xx来命名
2.final 修饰的变量在定义时,必须赋值,并且以后不能赋值
final-什么时候用
1.因为安全的考虑,类的某个方法不允许修改
2.类不会被其他类继承
3.某些变量值是固定不变的,比如圆周率3.1415926
数组
1.数组可以存放多个同一类型的数据
2.程序员用法
①.数组的定义:
数据类型 数组名[]=new 数据类型[大小]
int a[]=new int[5];
第一步:初始化数组
语法: 数据类型 数组名[]={元素值,元素值.....}
int a[]={1,20,30}相当于int a[]=new int[3];a[0]=1....
第二步:数组的引用(使用)
语法:数组名[下标]
引用 a数组的第2个元素a[1]
数组小结
- 数组可以存放同一类型的数据
- 简单的数据类型(int float)数组,可直接赋值。
- 对象数组在定义的时候,赋值时需要再次对每个对象分配空间【即:new 对象】
- 数组的大小可以事先指定
- 数组名可以理解为指向数组的首地址的引用
- 数组的下标是从0开始编号的
原码,反码,补码
对于有符号而言
- 二进制的最高位是符号位:0表示整数,1表示负数
- 正数的原码反码补码都一样
- 负数的反码=它的原码的符号位不变,其他位数取反(1->0;0->1)
- 负数的补码=它的反码+1;
- 0的反码补码都是0;
- java没有无符号,换言之,java中的数都是有符号的
- 在计算运算的时候,都是以补码的方式来运算的
Java语言中数据类型的所占的字节数
int 4字节
位运算符和移位运算符
基本概念:
1.java中有4个位运算,分别是“按位与&,按位或|,按位异或^,按位取反”
运算规则:
- 按位与&:两位全是1,结果为1;
- 按位或|:两位有一个为1,结果为1;
- 按位异或^:两位一个为0,一个为1,结果为1;
- 换位取反~ :1->0;0->1
例如~2=-3 2&3=2 2|3=3; 2^3=1;
java中的3个移位运算符:
- >> <<算数右移和算术左移,运算规则:
- 算术右移:低位溢出,符号位不变,并用符号位补溢出的高位:1>>2(2指的是移动的位数)
- 算术左移:符号位不变,地位补0;(相当于移动一位给原来的数乘2.......)
- >>>逻辑右移,运算规则:低位溢出,高位补0;(应该和算术右移一样)
集合框架
List结构集合类
ArrayList类,LinkedList类,Vector类(向量),Stack(栈)类
Map结构的集合类
HashMap类,Hashtable类
Set结构的集合类
HashSet类,Treeset类
Queue结构的集合
Queue接口
泛型
优点:1.类型安全
- 向后兼容
- 层次清晰
- 性能较高,用GJ(泛型java)编写的代码可以为java编译器和虚拟机带来
更多的类型信息,,这些信息对java程序做进一步优化提供条件
异常处理
概念:
当程序出现无法控制的外部环境问题(用户提供的文件不存在,文件内容损坏,网络不可以
........)时,JAVA就会用异常对象来描述
Java中用两种方法处理异常:
- 在发生异常的地方直接处理
- 将异常抛给调用者,让调用者处理
2 finally
如果把finally块置于try....catch......语句后。Finally块一般都会得到执行,它相当于一个万能保险,即使前面的try块发生异常,而又没有对应异常的catch块,finally块将马上执行
以下执行,finally块将不会被执行
- finally块中发生异常
- 程序所在的线程死亡
- 在前面的代码中用了System.exit();
- 关闭CPU
throw Exception(不常用).............
Swing组件
- 窗体组件
- 按钮组件
布局管理器
- 概念
组件在容器中(比如JFrame)中的位置和大小都是右布局管理器来决定的,所以的容器都会使用一个布局管理器,通过它来自动进行组件的布局管理
- 种类
java共提供5种布局管理器:流式布局管理器(Flowlayout),边界布局管理器(BorderLayout),网格布局管理器(GridLayout),卡片布局管理器(Cardlayout),网格包布局管理器(GridBagLayout),前三种是目前最常见的布局管理器
流式布局管理器(Flowlayout)的注意事项:
- 不限制他所管理的组件大小,允许他们有最佳大小
- 当容器被缩放时,组件的位置可能变化,但组件的大小不变
默认组件是居中的对齐的,可以通过//设置布局管理器这个函数 this.setLayout(new FlowLayout(FlowLayout.LEFT));//控制按钮的位置