字节码是16进制
单行注释
//
多行注释
/*
*/
文档注释
/**
**/
byte 1/8个字节
int 4
long 8
float 4
double 8
short 2
char 2
“表示多个字符串”
''表示一个
++ – 放变量前则先运算再操作后之相反
取余操作?
逻辑运算符只能用于boolean 类型的运算 (||&&)效率高
与**& 同时满足** 为true 检测到 && 一个为Flase则Flase 后面的条件就不在运行了
或**| 满足一个条件** 则为true 检测 一个为true 则为 true
非!
三元运算符
1<2?1:0
如果小于2成立则1:否则0(左真右假)
十进制和二进制的转换
十进制转二进制:目标数除以2,若能除尽,该位记做0,若除不尽,该位记做1,再对商继续除以2,以此类推,直到商为0,然后把每一位的结果反序组合就是对应的二进制。
位运算符:&(按位与)、|(按位或)、^(按位异或)、<<(左移)、>>(右移)
变量1 & 变量2:先把变量 1 和变量 2 转为二进制,每一位的数字一一对应,进行比较判断,若都为 1,则该位记做 1,否则记做 0。
变量1 | 变量2:先把变量 1 和变量 2 转为二进制,每一位的数字一一对应,进行比较判断,只要有一个为 1,则该位记做 1,否则 记做 0。
变量1 ^ 变量2:先把变量 1 和变量 2 转为二进制,每一位的数字一一对应,进行比较判断,相同记做 0,不同记做 1。
变量1 << 变量2:变量1乘以2的变量2次方
2 << 3 : 2 * 8 = 16
变量1 >> 变量2:变量1除以2的变量2次方
2 >> 3:2/8 = 0
//声明数组
int [] array;
//分配内存空间
array =new int[6];
//给数组赋值
arrar[0]=1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;
array[5] = 6;
int[]array2={1,2,3,4,5,6};
int[]array3=new int[]{1,2,3,4,5,6};
数组中的数据必须是同一类型的是用来存储大量数据类型的变量的数据结构,
数组就是一个具有相同数据类型的数据集合
数据本身就是一个变量,数据名就是变量名,
数组常见的错误
- 数据类型不匹配。
- 边声明边赋值的方式,代码必须写在同一行,不能换行。
- 数组下标越界。
二维数组可以理解成 里面有很多一维数组[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CRfbBBAe-1620915825453)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210427143959105.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FZ7TLqsx-1620915825456)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210427144850269.png)]
二维数组 array2 长度是 一维数组的长度
- 类和对象
类和对象的关系
每个对象都有特定的特征:1、属性。2、方法。
属性指的是对象的静态特征,方法用来描述对象的动态特征。
对象是用来描述客观存在的一个实体,该实体是由一组属性和方法构成。
类是与对象紧密结合的另外一个概念,类是产生对象的模版,所有的对象都是通过类来创建的。
二者的关系:类是对象的抽象化描述,这些对象具有相同的特征和动作(属性和方法)。
对象是类的具体实例。
Java 程序是以类位组织单元,程序运行时的主体是通过类创建的具体对象。
定义属性 --驼峰式命名法
Java 关于返回值的定义分为两类:有返回值和无返回值,有返回值的方法需要在方法定义时指定返回值的数据类型,并在方法体中用 return 将结果返回给外部调用者进行运算。
如果一个方法不需要进行返回操作,将返回值类型定义为 void。
参数列表是指外部在调用该方法时需要传入到方法内部进行运算的数据。
return?
构造函数是一种特殊的方法,普通方法是用来描述某个动作的,构造方法是用来创建对象的。
- 方法名必须与类名一致。
- 不需要定义返回值类型。
this 用来指代当前类的实例化对象,通过 this 可以调用当前类的属性和方法,比如在有参构造中,通过 this 将外部传入的值赋给当前类的实例化对象。
this 可以调用构造方法
可以用this 调用属性或者方法,但是不能在方法中同this
成员变量:如果一个变量在方法外,类中声明,则该变量是成员变量。
局部变量无初始值,成员变量有初始值,根据它的数据类型所确定的
封装的核心思想就是尽可能把属性都隐藏在内部,对外提供方法来访问,我们可以在这些方法中添加逻辑处理来实现过滤,以屏蔽错误数据的赋值。
static
static 表示静态或者全局,可以用来修饰成员变量和成员方法以及代码块。
使用 static 修饰的成员变量和成员方法独立于该类的任何一个实例化对象,访问时不依赖于该类的对象,而是直接通过类去访问,可以理解为被该类的所有实例对象所共用,所以说是全局的。
静态代码块的特点是只执行一次,什么时候执行?当这个类被加载到内存时执行,不需要开发者手动调用,会自动执行。
被加载到内存中的类叫做运行时类,静态代码块就是在加载类的时候执行的,因为类只加载一次,所以静态代码块也只执行一次。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xOnou8F0-1620915825458)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210427164313346.png)]
基本数据类型都在栈里面,引用类型在堆里面
子类访问父类
创建一个子类对象的时候,会默认先创建一个父类对象,无论是通过有参构造或是无参构造来创建子类对象,都是通过无参构造来创建父类对象的。
可以通过 super 关键字让子类创建对象时调用父类的有参构造。
包的命名规范:包名由小写字母组成,不能以 . 开头或结尾,可以包含数字,但不能以数字开头,使用 . 来分层。
包的命名方式一般采用网络域名的反向输出,如 com.company.test/com.company.entity。
方法重写
子类在继承父类方法的基础上,对父类方法重新定义并覆盖的操作叫做方法重写。
多态的具体使用
- 定义方法时形参类型为父类,实际调用方法时传入子类类型的参数
- 定义方法时返回值类型为父类,调用方法时,调用子类对象
基本原理都是父类的引用指向子类的对象。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oM5YWR6F-1620915825459)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210427202040117.png)]
public void settlement(Memeber memeber) {
memeber.buyBook();
}
Cashier cashier = new Cashier();
OrdinaryMember ordinaryMember = new OrdinaryMember();
cashier.settlement(ordinaryMember);
public Member getMember(String name) {
if(name.equals("ordinary")) {
return new OrdinaryMember();
}else {
return new SuperMember();
}
}
抽象方法和抽象类
抽象方法可以有普通方法
如果一个方法只有方法的声明而没有具体的方法实现,这个方法就叫做抽象方法,Java 中的抽象方法需要使用 abstract 关键字来修饰。
一旦类中定义了抽象方法,则该类也必须声明为抽象类,需要在类定义处添加 abstract 关键字。
抽象类不能被实例化,
抽象类中可以没有抽象方法,但是有抽象方法的类必须是抽象类。如果父类是抽象类,一旦子类继承了该抽象父类,则子类必须对父类的抽象方法进行重写,否则程序报错,如果子类也是抽象类,则可以不用重写父类的抽象方法。
。
Java 中的任何一个类都会继承 Object 中的 public 和 protected 方法。
//默认
System.out.println(test4.toString());
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
People people = (People)obj;
if(this.id == people.id && this.name.equals(people.name) && this.score.equals(people.score)) {
return true;
}
return false;
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return (int) (id*name.hashCode()*score);
}
包装类是一种类是专门用来创建八种基本数据类型对应的对象,一共有八个包装类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p9Q02SSt-1620915825460)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210427212657681.png)]
public Type(type value ) 每个包装类都提供了一个有参构造函数用来实例化包装类的对象
包装类 引用对象=new 包装类(基本数据类型)
每个包装类还有一个重载的构造函数,Character类的重载构造函数.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KgguKIQJ-1620915825461)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210427213741816.png)]
装箱和拆箱
装箱时将基本数据类型转化为包装类对象,拆箱就是讲包装类对象装换为基本数据类型
1、public Type(type value)
2、public Type(String value)/public Type(char value)
3、valueOf(type value) 静态方法,参数是基本数据类型的数据
包装类 类型 =包装类.valueOf(基本数据类型)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BpyvhBlL-1620915825462)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210427215341310.png)]
final修饰的类表示这个类没有子类了,修饰变量的也亦如此。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zgVYeIh4-1620915825463)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210427215357683.png)]
接口是由抽象衍生出来的一个概念,并由此产生了一种编程方式:面向接口编程,面向接口编程就是将程序中的业务模块进行分离,一接口的形式去对接不同的业务模块。
优点:当用户需求变更时,只需要切换不同的实现类,减少对系统的影响。
- 能够最大限度实现解耦合
- 降低程序的耦合性
- 使程序易于扩展
- 有利于程序的后期维护
接口在java中是独立存在的一种结构,和类相似。
pubulic Interface 接口名字{
public 返回值 方法名字(参数列表)
}
接口就是一个抽象类,极度抽象的抽象类
抽象类:一个类中存在没有集体实现的抽象方法时,那就可以称做这个类为抽象类同时抽象类中允许存在非抽象方法。成员变量:既可以是变量也可以是常量
但是接口完全不同,接口中不能存储非抽象方法,接口中的方法必须是抽象方法,以为接口中必须全都是抽象方法,所以修饰接口的关键字可以省略。
接口中允许定义成员变量,但是有如下要求。
- 不能定义private 和protected
- 接口中的成员变量在定义时必须完成初始化
- 接口中的成员变量都是静态常量但是不能不修改
接口在java中是独立存在的一种结构,和类相似。
pubulic Interface 接口名字{
public 返回值 方法名字(参数列表)
}
接口就是一个抽象类,极度抽象的抽象类
抽象类:一个类中存在没有集体实现的抽象方法时,那就可以称做这个类为抽象类同时抽象类中允许存在非抽象方法。成员变量:既可以是变量也可以是常量
但是接口完全不同,接口中不能存储非抽象方法,接口中的方法必须是抽象方法,以为接口中必须全都是抽象方法,所以修饰接口的关键字可以省略。
接口中允许定义成员变量,但是有如下要求。
- 不能定义private 和protected
- 接口中的成员变量在定义时必须完成初始化
- 接口中的成员变量都是静态常量但是不能不修改
接口和继承,Java 只支持单继承,但是接口可以多实现(一个实现类可以同时实现多个接口)