Java笔记整理二
1、idea使用与代码规范:
1.1项目层次:
Project -项目 名字小写
Moudule-模块 名字小写
Package -包 cn.li.javabasic
Class -类文件 所有单词首字母大写。
-方法,函数 首词首字母小写,其他字母大写
-变量 名字小写
1.2.代码规范
1.2.1包名:仅使用英语小写,数字及数字句点 并使用倒装例。
1.2.2类名: 首字母大写,用不同的后缀表达额外的意思。
SupplierService
后缀名 意义 举例
**Service**
表明这个类是个服务类,里面包含了给其他类提同业务服务的方法PaymentOrderService
**Impl**
这个类是一个实现类,而不是接口PaymentOrderServiceImpl
**Inter**
这个类是一个接口LifeCycleInter
**Dao**
这个类封装了数据访问方法PaymentOrderDao
**Action**
直接处理页面请求,管理页面逻辑了类UpdateOrderListAction
**Listener**
响应某种事件的类PaymentSuccessListener
**Event**
这个类代表了某种事件PaymentSuccessEvent
**Servlet**
一个ServletPaymentCallbackServlet
**Factory**
生成某种对象工厂的类PaymentOrderFactory
**Adapter**
用来连接某种以前不被支持的对象的类DatabaseLogAdapter
**Job**
某种按时间运行的任务PaymentOrderCancelJob
**Wrapper**
这是一个包装类,为了给某个类提供没有的能力SelectableOrderListWrapper
**Bean**
这是一个POJOMenuStateBean
1.2.3方法名
首字母小写,动词在前
如 addOrder()
动词前缀往往表达特定的含义,如下表:
前缀名意义举例
create创建createOrder()
delete删除deleteOrder()
add创建,暗示新创建的对象属于某个集合addPaidOrder()
remove删除removeOrder()
init或则initialize初始化,暗示会做些诸如获取资源等特殊动作initializeObjectPool
destroy销毁,暗示会做些诸如释放资源的特殊动作destroyObjectPool
open打开openConnection()
close关闭closeConnection()
read读取readUserName()
write写入writeUserName()
get获得getName()
set设置setName()
prepare准备prepareOrderList()
copy复制copyCustomerList()
modity修改modifyActualTotalAmount()
calculate数值计算calculateCommission()
do执行某个过程或流程doOrderCancelJob()
dispatch判断程序流程转向dispatchUserRequest()
start开始startOrderProcessing()
stop结束stopOrderProcessing()
send发送某个消息或事件sendOrderPaidMessage()
receive接受消息或时间receiveOrderPaidMessgae()
respond响应用户动作responseOrderListItemClicked()
find查找对象findNewSupplier()
update更新对象updateCommission()
1.2.4变量 :第一个单词是全部小写,后面的单词首字母大写。
myStudentCoun
1.2.5静态常量:全大写用下划线分割,如
public static find String ORDER_PAID_EVENT = “ORDER_PAID_EVENT”;
1.2.6枚举:全大写,用下划线分割,如
public enum Events {
ORDER_PAID,
ORDER_CREATED
}
1.2.7二元三元运算符两边用一个空格隔开
1.2.8逗号语句后如不换行,紧跟一个空格
2、idea推荐配置
2.1idea推荐配置
1.Settings --Editor–Font 设置字体及大小
2. Settings --Keymap–小齿轮–Copmletion–Basic
推荐使用alt+/ 提示输入;
2.2idea快捷键
快捷键 功能
Alt+Enter 导入包,自动修正代码
Ctrl+Y 删除光标所在行
Ctrl+D 复制光标所在行的内容,插入光标位置下面
Ctrl+Alt+L 格式化代码
Ctrl+/ 单行注释
Ctrl+Shift+/ 选中代码注释,多行注释,再按取消注释
Alt+Ins 自动生成代码,toString,get,set等方法
Alt+Shift+上下箭头 移动当前代码行
3.方法
3.1定义方法的格式详解
修饰符 返回值类型 方法名(参数列表){
//代码省略...
return 结果;
}
- 修饰符: public static 固定写法
- 返回值类型: 表示方法运行的结果的数据类型,方法执行后将结果返回到调用者
- 参数列表:方法在运算过程中的未知数据,调用者调用方法时传递
- return:将方法执行后的结果带给调用者,方法执行到 return ,整体方法运行结束
- 明确返回值类型:
- 明确参数列表:
3.2定义方法的注意事项
- 定义位置,类中方法外面。
- 返回值类型,必须要和 return 语句返回的类型相同,否则编译失败 。
- 不能在 return 后面写代码, return 意味着方法结束,所有后面的代码永远不会执行,属于无效代码。
3.3 调用方法的三种形式
- 直接调用:直接写方法名调用
public static void main(String[] args) {
print();
}
public static void print() {
System.out.println("方法被调用");
}
- 赋值调用:调用方法,在方法前面定义变量,接收方法返回值
public static void main(String[] args) {
int sum = getSum(5,6);
System.out.println(sum);
}
public static int getSum(int a,int b) {
return a + b;
}
-
输出语句调用:
- 在输出语句中调用方法, System.out.println(方法名()) 。
public static void main(String[] args) {
System.out.println(getSum(5,6));
}
public static int getSum(int a,int b) {
return a + b;
}
- 不能用输出语句调用 void 类型的方法。因为方法执行后没有结果,也就打印不出任何内容。
public static void main(String[] args) {
System.out.println(printHello());// 错误,不能输出语句调用void类型方法
}
public static void printHello() {
System.out.println("Hello");
}
3.4方法重载
- 方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
- 参数列表:个数不同,数据类型不同,顺序不同。
- 重载方法调用:JVM通过方法的参数列表,调用不同的方法。
4.数组
4.1 数组的定义
数组概念: 数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致
方式一
格式:
数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];
int[] arr = new int[3];
数组定义格式详解:
- 数组存储的数据类型: 创建的数组容器可以存储什么数据类型。
- [ ] : 表示数组。
- 数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。
- new:关键字,创建数组使用的关键字。
- 数组存储的数据类型: 创建的数组容器可以存储什么数据类型。
- [长度]:数组的长度,表示数组容器中可以存储多少个元素。
- 注意:数组有定长特性,长度一旦指定,不可更改。
方式二
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
int[] arr = new int[]{1,2,3,4,5};
方式三
数据类型[] 数组名 = {元素1,元素2,元素3...};
int[] arr = {1,2,3,4,5};
4.2 数组的访问
- 索引: 每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
- 数组的长度属性: 每个数组都具有长度,而且是固定的,Java中赋予了数组的一个属性,可以获取到数组的长度,语句为: 数组名.length ,属性length的执行结果是数组的长度,int类型结果。由次可以推断出,数组的最大索引值为 数组名.length-1 。
- 索引访问数组中的元素:
- 数组名[索引]=数值,为数组中的元素赋值
- 变量=数组名[索引],获取出数组中的元素
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr);//[I@5f150435
}
以上方法执行,输出的结果是[I@5f150435,这个是什么呢?是数组在内存中的地址。new出来的内容,都是在堆内存中存储的,而方法中的变量arr保存的是数组的地址。输出arr[0],就会输出arr保存的内存地址中数组中0索引上的元素
4.3 数组的常见操作
- 数组越界异常
public static void main(String[] args) {
int[] arr = {1,2,3};
System.out.println(arr[3]);
}
- 数组空指针异常
public static void main(String[] args) {
int[] arr = {1,2,3};
arr = null;
System.out.println(arr[0]);
}
- 数组遍历【重点】
- 数组遍历: 就是将数组中的每个元素分别获取出来,就是遍历。
- 数组获取最大值元素
public static void main(String[] args) {
int[] arr = { 5, 15, 2000, 10000, 100, 4000 };
//定义变量,保存数组中0索引的元素
int max = arr[0];
//遍历数组,取出每个元素
for (int i = 0; i < arr.length; i++) {
//遍历到的元素和变量max比较
//如果数组元素大于max
if (arr[i] > max) {
//max记录住大值
max = arr[i];
}
}
System.out.println("数组最大值是: " + max);
}
- 数组反转
- 数组的反转: 数组中的元素颠倒顺序,例如原始数组为1,2,3,4,5,反转后的数组为5,4,3,2,1
- 实现思想:数组最远端的元素互换位置。
- 实现反转,就需要将数组最远端元素位置交换
- 定义两个变量,保存数组的最小索引和最大索引
- 两个索引上的元素交换位置
- 最小索引++,最大索引–,再次交换位置
- 最小索引超过了最大索引,数组反转操作结束
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
/*
循环中定义变量min=0最小索引
max=arr.length‐1最大索引
min++,max‐‐
*/
for (int min = 0, max = arr.length ‐ 1; min <= max; min++, max‐‐) {
//利用第三方变量完成数组中的元素交换
int temp = arr[min];
arr[min] = arr[max];
arr[max] = temp;
}
// 反转后,遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
4.4 数组作为方法参数和返回值
4.4.1数组作为方法参数
- 数组作为方法参数传递,传递的参数是数组内存的地址。
public static void main(String[] args) {
int[] arr = { 1, 3, 5, 7, 9 };
//调用方法,传递数组
printArray(arr);
}
/*
创建方法,方法接收数组类型的参数
进行数组的遍历
*/
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
4.4.2 数组作为方法返回值
- 数组作为方法的返回值,返回的是数组的内存地址
public static void main(String[] args) {
//调用方法,接收数组的返回值
//接收到的是数组的内存地址
int[] arr = getArray();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
/*创建方法,返回值是数组类型
return返回数组的地址
*/
public static int[] getArray() {
int[] arr = { 1, 3, 5, 7, 9 };
//返回数组的地址,返回到调用者
return arr;
}
方法的参数为基本类型时,传递的是数据值. 方法的参数为引用类型时,传递的是地址值.
5.类与对象
- 类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
- 对象:是一类事物的具体体现。对象是类的一个实例,必然具备该类事物的属性和行为
- 类与对象的关系
- 类是对一类事物的描述,是抽象的。
- 对象是一类事物的实例,是具体的。
- 类是对象的模板,对象是类的实体。
5.1类的定义
public class ClassName {
//成员变量
//成员方法
}
- 定义类:就是定义类的成员,包括成员变量和成员方法。
- 成员变量:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外。
- 成员方法:和以前定义方法几乎是一样的。
5.2对象的使用
创建对象:
类名 对象名 = new 类名();
使用对象访问类中的成员:
对象名.成员变量;
对象名.成员方法();
成员变量的默认值
数据类型 | 默认值 | |
---|---|---|
基本类型 | 整数(byte,short,int,long) | 0 |
浮点数(float,double) | 0.0 | |
字符(char) | ‘\u0000’ | |
布尔(boolean) | false | |
引用类型 | 数组,类,接口 | null |
5.3成员变量和局部变量区别
- 在类中的位置不同 重点
- 成员变量:类中,方法外
- 局部变量:方法中或者方法声明上(形式参数)
- 作用范围不一样 重点
- 成员变量:类中
- 局部变量:方法中
- 初始化值的不同 重点
- 成员变量:有默认值
- 局部变量:没有默认值。必须先定义,赋值,最后使用
- 在内存中的位置不同 了解
- 成员变量:堆内存
- 局部变量:栈内存
- 生命周期不同 了解
- 成员变量:随着对象的创建而存在,随着对象的消失而消失
- 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
6.封装
将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。
步骤:
- 使用 private 关键字来修饰成员变量。
- 对需要访问的成员变量,提供对应的一对 getXxx 方法 、 setXxx 方法。
6.1private关键字
- private是一个权限修饰符,代表最小权限。
- 可以修饰成员变量和成员方法。
- 被private修饰后的成员变量和成员方法,只在本类中才能访问。
6.2this关键字
this代表所在类的当前对象的引用(地址值),即对象自己的引用。
记住 :方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。
public class Student {
private String name;
private int age;
public void setName(String name) {
//name = name;
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
//age = age;
this.age = age;
}
public int getAge() {
return age;}}
6.3构造方法
当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值
修饰符 构造方法名(参数列表){
// 方法体
}
public class Student {
private String name;
private int age;
// 无参数构造方法
public Student() {}
// 有参数构造方法
public Student(String name,int age) {
this.name = name;
this.age = age;
}
}
- 如果你不提供构造方法,系统会给出无参数构造方法。
- 如果你提供了构造方法,系统将不再提供无参数构造方法。
- 构造方法是可以重载的,既可以定义参数,也可以不定义参数。
6.4标准代码——JavaBean
JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无参数的构造方法,提供用来操作成员变量的 set 和 get 方法。
public class Student {
//成员变量
private String name;
private int age;
//构造方法
public Student() {}
public Student(String name,int age) {
this.name = name;
this.age = age;
}
//成员方法
publicvoid setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
publicvoid setAge(int age) {
this.age = age;
}
publicint getAge() {
return age;
}
}