Java学习之路(一):查缺补漏

一、文档注释:

在这里插入图片描述
文档注释是Java特有的,注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该文件的说明文档
javadoc -d 生成后存放文档的文件夹名 -author -version XXX.java

二、命名规范

1.标识符的命名规范

  • 由26个英文字母大小写,0-9,$,_ 组成
  • 数字不可以开头
  • 不可以使用关键字或保留字,但可以包含
  • 对大小写敏感
  • 标识符不能包含空格

2. Java中命名规范(驼峰原则)

  • 包名:多单词组成时所有字母都小写,xxxyyyzzz
  • 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
  • 变量名、方法名:多单词组成时,第一个单词的首字母小写,其他单词的首字母都大写,xxxYyyZzz
  • 常量名:所有字母都大写,多单词时每个单词用下划线连接:XXX_YYY_ZZZ

三、byte、char、short做运算

  • byte、char、short这三种类型做运算(包括同种类型之间做运算)时,结果都是int类型
  • 整型常量默认为int型
  • 浮点型常量默认为double型
  • char类型有且只能放一个字符
  • 使用 +=,*=,-=,/=,%=进行计算后结果仍然是原来的类型

四、四种进制的表示

  • 二进制(binary):0,1,满2进1,以0b或0B开头
  • 八进制(octal):0-7,满8进1,以0开头
  • 十进制(decimal):0-9,满10进1
  • 十六进制(hex):0-9及A-F(a-f),满16进1,以0x或0X开头表示

五、右移运算符和无符号右移运算符

  • 右移运算符: >> 如果最高位为0,则补0,如果最高位为1,则补1
  • 无符号右移运算符: >>> 无论最高位为0还是1,都补0;

六、交换两个数的方法

1.定义临时变量

int num1 = 10;
int num2 = 20;
int tmp = num1;
num1 = num2;
num2 = temp;

2.不定义临时变量

/**
只适用于数值类型
相加时可能超出存储范围
*/
int num1 = 10;
int num2 = 20;
num1 += num2;  //执行之后num1 = 30,num2 = 20
num2 = num1-num2;//执行之后num1 = 30,num2 = 10
num1 = num1-num2;//执行之后 num1 = 20,num2 = 10

3.用位运算符

/**原理:a与同一个数异或两次等于a*/
/**只适用于数值类型*/
int num1 = 10;
int num2 = 20;
num1 = num1^num2;
num2 = num1^num2;
num1 = num1^num2;

七、switch结构中的表达式

  • switch结构中的表达式,只能是如下的6种数据类型之一:byte,short,char,int,枚举类型(JDK5.0之后新增的),String类型(JDK7.0之后新增的)。
  • case之后的值只能是常量

八、数组

1. 一维数组

//声明
int[] ids;
//静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids = new int[]{1001,1002,1003,1004};
//动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names = new String[5];

2.二维数组

//声明
int[][] ids;
//静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids = new int[][]{{1,2,3,4},{5,6,7},{8,9}};
ids = {{1,2,3,4},{5,6,7},{8,9}};//也是正确的写法
//动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[][] names = new String[5][3];
String[][] name= new String[5][];

在这里插入图片描述
在这里插入图片描述

3.数组的默认初始化值

  • 数组元素是整型:0
  • 数组元素是浮点型:0.0
  • 数组元素是char型: 0(ASCII码)或“\u0000”
  • 数组元素是boolean型:false
  • 数组元素是引用类型:null

注意:成员变量(属性)的默认初始化也是这些值

九、数据结构与算法

1、数据结构

  1. 数据与数据之间的关系:集合、一对一、一对多、多对多
  2. 数据的存储结构
  • 线性表:顺序表(如数组),链表,栈,队列
  • 树形结构:二叉树等
  • 图形结构:有向图、无向图等

2.算法

  1. 排序算法
  2. 检索算法

十、方法参数的值传递机制

  • 形参:方法声明时的参数
  • 实参:方法调用时实际传给形参的值
  • Java里方法的参数传递只有一种:值传递
  1. 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
  2. 形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参

注意:String类型的变量虽然也是引用类型,但是因为其地址指向的数据是放在内存中的方法区里的常量池(数据不可修改),所以修改String类型的值相当于在常量池中创建一个新的常量,然后把原先的地址改为新的地址

十一、理解“万事万物皆对象”

  1. 在Java语言范畴中,我们都将功能,结构封装到类中,然后通过类的实例化,来调用具体的功能
  2. 涉及到Java语言与前端Html、后端的数据库交互时,前后端的结构在Java层面交互时,都体现为类,对象。

十二、可变个数的形参

  • JavaSE5.0中提供了Varargs(variable number of raguments)机制,允许直接定义能和多个实参相匹配的形参,从而,可以使用一种更简单的方式,来传递个数可变的实参。

//JDK5.0以前:采用数组形参来定义方法,传入多个同一类型的变量
public static void test(int a,String[] books);
//JDK5.0之后,采用可变个数形参来定义方法,传入多个同一类型的变量
public static void test(int a,String ... books);

  • 当调用可变个数形参的方法时,传入参数的个数可以是任意个(0,1,2。。。)

注意:可变个数形参必须写在参数列表的末尾,且一个方法最多只有一个

十三、JavaBean

javabean是一种java语言写成的可重用组件

所谓JavaBean,是指符合如下标准的Java类

  1. 类是公共的
  2. 有一个无参的公共的构造器
  3. 有属性,且有对应的get和set方法

十四、UML类图

在这里插入图片描述

十五、MVC设计模式

在这里插入图片描述
在这里插入图片描述

十六、代码块

  • 代码块的作用:用来初始化类、对象
  • 代码块如果有修饰的话,只能使用static
  • 分类:静态代码块和非静态代码块
    1.静态代码块
    - 内部可以有输出语句
    - 随着类的加载而执行
    - 作用:初始化类的信息
    - 如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行
    2.非静态代码块
    - 内部可以有输出语句
    - 随着对象的加载而执行
    - 每创建一个对象就执行一次
    - 作用:可以在创建对象时,对对象的属性等进行初始化
    - 如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行

非静态代码块、静态代码块、构造器的执行顺序
在这里插入图片描述
总结为:由父及子,静态先行

对属性赋值的位置和顺序

  1. 默认初始化
  2. 显示初始化 || 在代码块中赋值(谁先写,先赋值)
  3. 构造器中赋值
  4. 创建对象后,通过”对象.属性或对象.方法“的方式进行赋值

十七、抽象类 abstract

  • abstract可以用来修饰方法
  • abstract修饰类:抽象类
  1. 抽象类不能实例化
  2. 抽象类中一定有构造器,便于子类实例化是调用(涉及:子类实例化的全过程)
  3. 开发中,都会提供抽象类的子类,让子类对象实例化,完成相关操作
  • abstract修饰方法:抽象方法
  1. 抽象方法只有方法的声明,没有方法体
  2. 包含抽象方法的类一定是抽象类 ,反之,抽象类中可以没有抽象方法
  3. 若子类重写父类中所有的抽象方法,则该子类可以实例化,若没有重写所有的抽象方法,则该子类也是抽象类
  • abstract不能用来修饰属性和构造器
  • abstract不能用来修饰私有方法、静态方法、final的方法、final的类
  • 抽象了类的匿名子类

创建一匿名子类的对象
Person p = new Person(){
	@Override
	public void eat(){
		System,out,println("eating...");
	}
	@Override
	public void breath(){
		System.out.println("fresh air ...");
	}
};
其中Person类是抽象类,eat()breath()都是抽象方法

十八、接口 interface

  • 接口就是规范,定义的是一组规则,体现了显示世界中“如果你是/要…则必须能…”的思想。继承是一个“是不是”的关系,而接口实现则是“能不能”的关系
  • 接口的本质是契约,标准,规范,就像我们的法律一样。指定好后大家都要遵守

接口的使用

  1. 接口使用interface来定义
  2. Java中,接口和类是并列的两个结构
  3. 如何定义接口:定义接口中的成员
    3.1 JDK7及以前:只能定义全局常量和抽象方法
    全局变量:public static final,但是书写时,可以省略
    抽象方法:public abstract,但是书写时,可以省略
    3.2 JDK8:除了可以定义全局常量和抽象方法之外,还可以定义静态方法和默认方法
    静态方法:public static,只能通过接口调用,实现类中是看不到接口中的静态方法的
    默认方法:public default,通过实现类的对象调用,也可以重写接口中的默认方法。

注意:如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的方法,那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数方法
注意:如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么在实现类没有重写此方法的情况下报错——>接口冲突

  1. 接口中不能定义构造器!意味着接口不能实例化
  2. 在Java开发中,接口通过让类去实现(implements)的方式去使用
  3. Java类中可以多实现,弥补了java单继承性的局限性
    class extend AA implements BB,CC
  4. 接口与接口之间可以多继承
  5. 接口的具体使用,体现多态性
  6. 接口实际上可以看做是一种规范
    在这里插入图片描述

十九、成员内部类

  • java中允许将一个类A声明在另一个类中,则A类就是内部类,类B称为外部类
  • 内部类的分类: 成员内部类(静态和非静态)vs 局部内部类(方法内、代码块内、构造器内)
  • 成员内部类:
  1. 作为外部类的成员:
    ①调用外部类的结构:外部类.super.结构
    ②可以用static修饰
    ③可以被4中不同的权限修饰
  2. 作为一个类
    ① 类内可以定义属性、方法、构造器等
    ②可以被final修饰
    ③可以被abstract修饰

关注三个点:

  1. 如何实例化内部类:
  • 静态的成员内部类:外部类.内部类 变量名 = new 外部类.内部类();
  • 非静态的成员内部类:外部类 outer = new 外部类(); 外部类.内部类 inter = outer.new 内部类();
  1. 如何在成员内部类中区分调用外部类的结构:外部类.super.结构
  2. 开发中内部类的使用
  • 局部内部类
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值