java基础2
eclipse
常用快捷键
- 输入“main”,然后按“Alt+/”,回车,快速生成程序入口。
- 输入"/**",回车,快速形成文档作者、时间标注。
- 补全代码的声明:alt + /
- 快速修复: ctrl + 1
- 批量导包:ctrl + shift + o
- 使用单行注释:ctrl + /
- 使用多行注释: ctrl + shift + /
- 取消多行注释:ctrl + shift + \
- 复制指定行的代码:ctrl + alt + down 或 ctrl + alt + up
- 删除指定行的代码:ctrl + d
- 上下移动代码:alt + up 或 alt + down
- 切换到下一行代码空位:shift + enter
- 切换到上一行代码空位:ctrl + shift + enter
- 如何查看源码:ctrl + 选中指定的结构 或 ctrl + shift + t
- 退回到前一个编辑的页面:alt + left
- 进入到下一个编辑的页面(针对于上面那条来说的):alt + right
- 光标选中指定的类,查看继承树结构:ctrl + t
- 复制代码: ctrl + c
- 撤销: ctrl + z
- 反撤销: ctrl + y
- 剪切:ctrl + x
- 粘贴:ctrl + v
- 保存: ctrl + s
- 全选:ctrl + a
- 格式化代码: ctrl + shift + f
- 选中数行,整体往后移动:tab
- 选中数行,整体往前移动:shift + tab
- 在当前类中,显示类结构,并支持搜索指定的方法、属性等:ctrl + o
- 批量修改指定的变量名、方法名、类名等:alt + shift + r
- 选中的结构的大小写的切换:变成大写: ctrl + shift + x
- 选中的结构的大小写的切换:变成小写:ctrl + shift + y
- 调出生成getter/setter/构造器等结构: alt + shift + s
- 显示当前选择资源(工程 or 文件)的属性:alt + enter
- 快速查找:参照选中的Word快速定位到下一个 :ctrl + k
- 关闭当前窗口:ctrl + w
- 关闭所有的窗口:ctrl + shift + w
- 查看指定的结构使用过的地方:ctrl + alt + g
- 查找与替换:ctrl + f
- 最大化当前的View:ctrl + m
- 直接定位到当前行的首位:home
- 直接定位到当前行的末位:end
数组
数组的概述
数组元素是整型的,元素的默认值是0
数组元素是浮点型的,元素的默认值是0.0
数组元素是char型的,元素的默认值是0或’\u0000’,而非’0’
数组元素是boolean的,元素的默认值是false
数组元素是引用数据类型的,元素的默认值是null
数组元素是数组的,元素的值是内存地址值
内存结构说明
在main方法中创建的变量都叫局部变量。
package com.dfq.apackage;
public class HelloWorld {
public static void main(String[] args) {
//静态初始化一维数组
int[] intArray;
intArray = new int[]{1000,1001,1002};
//System.out.println(intArray[0]);
//动态初始化一维数组
String[] strArray = new String[5];
strArray[0] = "dfq";
//System.out.println(strArray[0]);
//System.out.println(strArray.length);
//静态初始化二维数组
int[][] intArray2 = new int[][]{{1,2,3},{4,5},{6,7,8}};
//动态初始化二维数组
String[][] strArray2 = new String[3][4];
String[][] strArray3 = new String[3][];
strArray3[1] = new String[2];
System.out.println(intArray2[0][1]);
}
}
数组中涉及到的常见算法
Arrays工具类的使用
对象
- Java类及类的成员:属性、方法、构造器;代码块、内部类。
- 面向对象的三大特征:封装性、继承性、多态性。
- 其他关键字:this、super、static、final、abstract、interface、package、import。
面向过程与面向对象
对象的创建和使用:内存分析
在类中声明的位置不同:
- 属性:声明定义在类的一对{}内
- 局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量。
关于权限修饰符的不同:
- 属性:可以在声明属性时,指明其权限,使用权限修饰符。
- 常用的权限修饰符:private、public、缺省、protected。
- 局部变量:不可以使用权限修饰符。
默认初始化值的情况:
- 属性:类的属性,根据其类型,都有默认初始化值。
- 整型(byte、short、int、long):0
- 浮点型(float、double):0.0
- 字符型(char):0 或 ‘\u0000’
- 布尔型(boolean):false
- 引用数据类型(类、数组、接口、):null
- 局部变量:没有默认初始化值,我们在调用局部变量之前一定要显式赋值。特别的,形参在调用时我们赋值即可。
在内存中加载的位置:
- 属性: 加载到堆空间中(非static)
- 局部变量:加载到栈空间
return关键字后面不可以声明执行语句。
引用类型的变量,只可能存储两类值,null 或 地址值(含变量的类型)
匿名对象
/**
* 匿名对象的使用
* 1.理解:我们创建的对象,没有显式的赋给一个变量名。即为匿名对象
* 2.特征:匿名对象只能调用一次。
* 3.使用:如下
*
*/
public class InstanceTest {
public static void main(String[] args) {
Phone p = new Phone();
// p = null;
System.out.println(p);
p.sendEmail();
p.playGame();
//匿名对象
// new Phone().sendEmail();
// new Phone().playGame();
new Phone().price = 1999;
new Phone().showPrice();//0.0
//**********************************
PhoneMall mall = new PhoneMall();
// mall.show(p);
//匿名对象的使用
mall.show(new Phone());
}
}
class PhoneMall{
public void show(Phone phone){
phone.sendEmail();
phone.playGame();
}
}
class Phone{
double price;//价格
public void sendEmail(){
System.out.println("发送邮件");
}
public void playGame(){
System.out.println("玩游戏");
}
public void showPrice(){
System.out.println("手机价格为:" + price);
}
}
方法的重载
判断是否是重载:跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系!
不限制形参的数量,形参的数量可以任意个匹配。
使用方法对基础数据类型的处理不能对原数据直接生效,对对象的处理可以直接生效。
如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值。
如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值。
封装和隐藏
通过对class内的成员变量增加权限修饰符private对其进行封装,并对外提供新的方法,用户通过执行新的方法间接实现对成员变量值的修改。
构造器(或构造方法、constructor)的使用
3.一个类中定义的多个构造器,彼此构成重载。
4.一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器。
5.一个类中,至少会有一个构造器。
JavaBean
this的使用
package
import
继承性
private 私有的属性和方法也会被继承。
如果我们没有显式的声明一个类的父类的话,则此类继承于java.lang.Object类。
所有的Java类(除java.lang.Object类之外)都直接或间接的继承于java.lang.Object类。
方法的重写
父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void。
子类重写的方法抛出的异常类型不大于父类被重新的方法抛出的异常了类型。
子类和父类中的同名同参数的方法要么都声明为非static的(考虑重写),要么都声明为static的(不是重写)。只有非static的才能考虑叫重写。
super
子类对象实例化的全过程
多态性
// 对象的多态性:父类的引用指向子类的对象。
Person p2 = new Man();
// 多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法。
对象的多态性只适用于方法,不适用于属性(编译和运行都看左边)。
方法的重载与重写
接口
代理模式
工厂模式
内部类
局部内部类