IDEA的使用、方法、数组、类与对象、this、super、构造方法、JavaBean
项目——模块——包——方法
java程序开发的三步骤:编写、编译、运行
一个java文件可以写多个类,但是最多只能有有一个是public的。(可以没有)
而且public的类的类名要和文件名一样。
但是实际工作中最好一个文件一个类。
IDEA的常用快捷键总结:
- 多行操作:alt + 鼠标拖动
- 复制:光标—>shift——>光标最后
- 输入后面要留空格,可以(+ “\t”)tab键
- psvm + 回车:main方法
- sout + 回车:输出语句
- for循环:次数.for
- iter + 回车 :增强for
- Ctrl+Y 删除光标所在行
Ctrl+D 复制光标所在行的内容,插入光标位置下面
Ctrl+Alt+L 格式化代码
Ctrl+/ 单行注释
Ctrl+Shift+/ 选中代码注释,多行注释,再按取消注释
Alt+Shift+上下箭头 移动当前代码行
shift + 回车: 光标跳到下一行
ctrl + r :多个替换
shift + F6:包和类的重命名
alt + 回车 :万能键
ctrl + 鼠标点击:查看父类方法
切换java文档 :ALT + 左/右键
切换工程 :Ctrl + ALT + [
显示/隐藏工程树 :ALT + 1
显示类中方法 : ALT + 7
光标跳到异常点 --- F2
对选中代码执行try catch之类的操作 : ctrl + alt + t
需要提示信息 : ctrl + q
查找某个元素:ctrl + f
方法
定义格式:
修饰符 返回值类型 方法名 (参数列表){
代码...
}
方法注意事项:
- 方法必须定义在类中方法外
- 方法不能定义在另一个方法的里面
方法的返回值类型:
- void
- 基本数据类型8种:byte short int long float double char boolean
- 引用数据类型:类、数组、接口
定义方法明确两点:(根据方法的功能)
- 返回值类型
- 参数列表
注意:方法的返回值类型跟参数类型任意写(可以不同)。
return值:
- 结束方法。 注意:return后面的代码没用,到return就结束。
- 将结果返回到调用的地方。
返回值是void,不用加return。若想跳出方法,则写:return;
调用方法的三种形式:
- 直接调用:直接写方法名调用。方法名(参数) (没有对返回值进行处理)
- 赋值调用:调用方法,在方法前面定义变量,接收方法返回值。 变量名 = 方法名(参数); (方法返回什么类型,我们就用什么类型接受) 好处:可以对结果处理。
- 输出语句调用:在输出语句中调用方法, System.out.println(方法名()) 输出方法的返回值。 (不能用输出语句调用 void 类型的方法。因为方法执行后没有结果,也就打印不出任何内容)
在方法中可以写代码拦截非法数据。 例如用if语句。
方法的重载:
指在同一个类中,方法名相同,参数列表不同,与修饰符和返回值类型无关。
参数列表不相同:
- 数量不同
- 类型不同
- 顺序不同
再次强调,与返回值,没有关系。
数组
数组都是传址的,所以对数组的操作都是直接改变数组。
什么是数组:
数组就是一个容器, 用来存储同种数据类型的多个值。
数组的初始化:
动态初始化
静态初始化
数组的特点:
- 存储的数据类型要一致
- 数组长度固定(数组有定长特性,长度一旦指定,不可更改。)
数组的定义:
- 数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度]; (动态初始化)
- 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...}; 注意:不要写长度,java程序会根据我们给的具体数据去数出有及格元素。 (静态初始化):有具体的数据。
- 数据类型[] 数组名 = {元素1,元素2,元素3...};
直接输入数组名字:
[ I @ 内存地址:十六进制形式
(数组) (类型) 无意义
索引的概念:
每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引。
数组的长度属性:
数组名.length
数组的赋值是传址的:
int[] arr1 = new int[3];
int[] arr2 = new arr1;(将arr1的地址赋值给arr2,两个变量指向一个数组)
数组元素的默认值:
byte[] short[] int[] long[] | 默认值是0 |
float[] double[] | 默认值是0.0 |
boolean | 默认值是false |
char[] |
默认值是'\u0000' 其实上面什么都看不到 |
自己对数组的总结的及格事项:
- arr = null;null不保存任何地址。
- 数组的长度可以为0,但是没有意义,一个数据都存不了。数组的长度不能是负数。
- 方法调用数组,数组作为参数,传的是数组地址。
- 数组可以作为返回值类型,返回的是数组的地址。
- 数组创建的空间,每new一次就生成一个新的空间,每个空间相互独立。
自己对数组的小拓展:
数组不能像变量那样强制转换。
例: int[ ] a1 = new int[5];
double[] a2 = a1;
是不可以的因为a1的地址:[ I @ ——(内存地址)
a2的地址:[ d @ ——(内存地址)
数组传址传的是后面的部分,但是因为这个前面不同,所以不能传。
数组的创建,元素都是在从常量池获取的。
类与对象
什么是面向对象:
是一种编程的思维方式。
类是用来描述一类事物的。
对象是类的一个具体实例。
java中类的定义格式:
public class 类名 {
//成员变量:表示事物deep属性(在类中方法外)
//成员方法:表示事物的行为
}
根据类创建对象的格式:
类名 对象名 = new 类名();
成员变量的使用:
- 获取成员变量值: 对象名.成员变量名
- 给成员变量赋值: 对象名.成员变量名 = 新的值
成员变量默认值:
byte short int long | 0 |
float double | 0.0 |
boolean | false |
char | '\u0000' |
引用数据类型:String |
null |
成员变量和局部变量区别
在类中的位置不同:
成员变量:类中,方法外
局部变量:方法中或者方法声明上(形式参数)
作用范围不一样:
成员变量:类中
局部变量:方法中
初始化值的不同:
成员变量:有默认值
局部变量:没有默认值。必须先定义,赋值,最后使用
在内存中的位置不同:
成员变量:堆内存
局部变量:栈内存
生命周期不同:
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
注意:不在一个包中的类需要导包,就是告诉java使用哪个包中的类。
最简单的方案:写类名一半,提示,按回车
当new出对象时:
- 因为每个对象的属性是不同的,所以每个对象都会拷贝成员变量,用于保存自己的属性。
- 因为方法的代码是固定不变的,不需要拷贝到对象里面,大家共同使用即可。
结论:new出对象是,拷贝对象的成员变量,但不拷贝方法。
super和this
super和this的含义
super :代表父类的存储空间标识(可以理解为父亲的引用)。
this :代表当前对象的引用(谁调用就代表谁)。
super和this的用法:
1)访问成员
this.成员变量 ‐‐ 本类的
super.成员变量 ‐‐ 父类的
this.成员方法名() ‐‐ 本类的
super.成员方法名() ‐‐ 父类的
2)访问构造方法
this(...) ‐‐ 本类的构造方法
super(...) ‐‐ 父类的构造方法
注意:
子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的super()。
super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现。
this关键字的作用:
用来区分成员变量和局部变量。
方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。
构造方法
构造方法的定义:
在创建对象的时候才执行一次,也是一个方法。
构造方法的作用:
在创建对象时给成员变量赋值。
构造方法的定义格式:
修饰符 构造方法名(参数列表){
// 方法体
}
构造方法的特点:
- 没有返回值,连void都不用写。
- 构造方法方法名称和类名一致。
- 一个类不写构造方法,java会默认赠送一个无参构造。
- 当我们自己添加了构造方法,就没有默认的构造方法。
- 构造方法可以重载,既可以定义参数,也可以不定义参数。
构造方法什么时候调用:
类名 对象名 = new 类名();
new:表示在堆中申请一块空间。
类名():表示调用构造方法。
构造方法可以给成员变量赋值,set也能给成员变量赋值,他们的区别:
- 构造方法会在创建对象的时候走一次,一个对象只能执行一次构造方法。
- set方法是在对象创建好后,通过对象调用set方法,一个对象可以多个调用set方法。
JavaBean(标准代码)
- 类必须是具体的和公共的。
- 成员变量要私有。
- 并且具有无参数的构造方法(必须的)。
- 增加有参构造。(建议)
- 提供get/set方法。