IDE集成开发工具(integrated development environment): project→module→package
所有代码都得在src中,Class文件在out文件下
快捷键
psvm/main: public static void main(String[] args) {}
sout: System.out.println("1");
当缩小执行结果后,按alt+4显示
Alt+enter 导入包,自动修正代码
Ctrl+Y 删除光标所在行
Ctrl+D 复制光标所在行的内容,插入光标位置下面。
Ctrl+Alt+L 格式化代码
Ctrl+/ 单行注释 再按取消注释
Ctrl+shift+/ 选中代码注释,多行注释,再按取消注释
Alt+Insert 自动生成代码,toString,get,set等方法
Alt+shift+ 上下箭头 移动当前代码行
数字.fori for (int i = 0; i < 20; i++) {}
Shift+F6 一起改变
方法:
方法(工厂)就是若干语句的功能集合;方法名字使用小驼峰规则
参数(原料):进入方法的数据;如果有多个,使用逗号进行分隔
返回值(产出物):从方法中出来的数据;方法执行后最终产生的数据结果;
定义方法的完整格式:
修饰符 返回值类型 方法名称(参数类型 参数名称, …){
方法体
return 返回值;
}
返回值类型:方法最终产生的数据结果是什么类型;
参数类型:进入方法的数据是什么类型;
参数名称:进入方法的数据对应的变量名称;
方法体:方法需要做的事,若干行代码
return:两个作用,第一停止当前方法,第二将后面的返回值还给调用处
return后面的返回值,必须和方法名称前面的 返回值类型 保持对应。
返回值:也就是方法执行后最终产生的数据结果
Eg:定义一个两个int数字相加的方法。
三要素:
返回值类型:int + int→int
方法名称:sum
参数列表:int a,int b;
方法的三种调用格式:
- 单独调用:方法名称(参数);
Main中 sum(10,20);
- 打印调用:System.out.println( 方法名称(参数));
Main方法中System.out.println(sum(10,20));
- 赋值调用:数据类型 变量名称 = 方法名称(参数);
Main方法中int number = sum(10,20);System.out.println(number);
返回值类型固定为void时,只能单独调用,不能进行打印调用或者赋值调用
方法的调用流程图解
对比有参数和无参数
有参数:小括号中有内容,当一个方法需要一些数据条件,才能完成任务的时候,就是有参数。例如两个数字相加,必须知道两个数字各自是多少,才能相加。
无参数:小括号中留空,一个方法不需要任何数据条件,自己就能独立完成任务,就是无参数。例如定义一个方法,打印固定十次helloworld。
对比有返回值和无返回值
有返回值的都可以使用三种调用
无返回值的只能使用单独调用(void)
方法的注意事项:
- 方法应该定义在类当中,但是不能嵌套方法
- 方法的前后顺序无所谓
- 方法定义之后不会执行,需要执行一定要调用
- 如果方法有返回值,那么必须写上return 返回值,不能没有
- Return的数据必须和方法的返回值类型相同
- 对于void,不能写return后的返回值,只能写return;且如果在最后一行,可以删除
- 一个方法当中可以有很多的return语句,但是必须保证同时只有一个会被执行到。
重载overload
对于功能相似的方法来说,因为参数列表不同,若用不同的方法名称,太麻烦了。
→方法重载:多个方法名称一样,但参数列表不同。即可用一个方法名称实现类似的多个功能。
在调用输出语句print时,println方法就是进行了多种数据类型的重载形式,且是由JDK提供的。
方法重载与下列因素有关:
- 参数个数不同
- 参数类型不同
- 参数的多类型顺序不同
方法重载与下列因素无关:
- 与参数名称无关
- 与方法的返回值类型无关
数组:
数组是一种容器,可以同时存放多个数据值。
数组的特点:
①数组是一种引用数据类型;②数组当中的多个数据,类型必须统一;③数组的长度在程序运行期间不可改变。
数组的初始化:在内存中创建一个数组,并且向其中赋予一些默认值;可以拆分为两个步骤;
- 动态初始化(指定长度);
在创建数组的时候,直接指定数组当中的数据元素个数。
数据类型 [ ] 数组名称 = new 数据类型[数组长度];
解析:
左侧数据类型:数组当中保存的数据,全都是统一的什么类型。
左侧的中括号:代表是数组。
左侧数组名称:给数组取一个名字。
右侧的new:代表创建数组的动作。
右侧数据类型:必须和左边的数据类型一致。
右侧中括号的长度:也就是在数组当中,到底可以保存多少个数据,是一个int。
- 静态初始化(指定内容);
在创建数组的时候,不直接指定数组当中的数据元素个数,而是直接将具体的数据内容进行指定。
基本格式(标准格式):
数据类型 [ ] 数组名称 = new 数据类型[ ]{元素1、元素2、……};
虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出长度。
省略格式(不可拆分为两个步骤):
数据类型 [ ] 数组名称 = {元素1、元素2、……};
直接打印数组名称,得到的是数组对应的内存地址哈希值。
访问数组元素的格式:数组名称 [ 索引值 ]
索引值:是一个int数字,代表数组当中元素的编号。从0开始,一直到数组长度-1;
如果使用动态初始化数组的时候,其中的元素将会自动拥有一个默认值。规则如下:
如果是整数类型,默认为0;
如果是浮点类型,默认为0.0;
如果是字符类型,默认为‘\u0000’;
如果是布尔类型,默认为false;
如果是引用类型,默认为null;
注意事项:静态初始化也有默认值,但是系统自动将默认值替换为大括号后的内容;
Java的内存划分:
- 栈stack
存放的都是局部变量;方法的运行一定要在栈当中运行。(局部变量:方法的参数,或者是方法{ }内部的变量)。一旦超过作用域,立刻从栈内存当中消失。
- 堆heap
凡是new出来的东西,都在堆当中。堆内存里的东西都有一个地址值(十六进制),堆内存中的数据都有默认值。
- 方法区(method area)
存储.class相关的信息,包含方法的信息。
- 本地方法栈(native method stack)
与OS有关。
- 寄存器(pc register)
与CPU有关。
常见问题:
- 数组索引越界异常;
- 空指针异常;
所有的引用类型变量,都可以赋值为一个null值。但是代表其中什么都没有。
数组必须进行new初始化才能使用其中的元素,如果只是赋值了一个null,没有进行new创建,那么将会发生空指针异常:NullPointerException。
获取数组的长度:数组名称.length。
遍历数组:使用循环,次数其实就是数组的长度。
数组元素的反转:对称位置的元素交换
需要两个索引值,int min=0;int max=array.length-1;
需要一个空变量;
数组可以作为方法的参数,当调用方法时,向方法的小括号进行传参,传递进去的其实是数组的地址值。
数组可以作为方法的返回值,返回的是数组的地址值;
面向对象:
面向过程:
当需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节。
面向对象:
当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做事。Eg:找一个JDK给我们提供好的array类,其中有一个toString方法,直接就能把数组变成想要的格式的字符串。
类:对一类事物的描述,是抽象的。
对象:一类事物的实例,是具体的。
类是对象的模版,对象是类的实体。
类的定义:
属性:(是什么)成员变量→直接定义在类当中的,在方法外边;
行为:(能做什么)成员方法→去掉static关键字
Public class definite{
成员变量
成员方法
}
通常情况下,一个类并不直接使用,需要根据类创建一个对象,才能使用。
- 导包:指出需要使用的类,在什么位置。(对于和当前类属于同一个包的情况,可以省略导包语句不写。)
import 包名称.类名称;
- 创建
类名称 对象名=new 类名称();
- 使用
使用成员变量:对象名.成员变量名→如果未赋值,会有默认值
使用成员方法:对象名.成员方法名(参数)
面向对象编程oop:→ 谁的数据谁处理
开发一个一个的对象,把数据交给对象,再调用对象的方法来完成对数据的处理。
1、面向对象编程有什么好处?
符合人类思维习惯,编程更简单、更直观。
2、程序中的对象到底是什么?
对象本质上是一种特殊的数据结构。相当于一张表,表中是什么数据,对象处理的就是什么数据。
3、对象是怎么出来的?
用class设计对象,class是类,也称为对象的设计图(或者对象的模板)。类中变量用来说明可以处理什么数据,类中方法用于描述对象有什么功能,也就是可以对数据进行什么样的处理。
对象在计算机中的执行原理:
如何识别引用类型的变量?
Student s1 = new Student ( );
s1变量中存储的是对象的地址,因此变量s1也称为引用类型的变量。
注意:当堆内存中的对象,没有被任何变量引用(指向)时,就会判定为内存中的“垃圾”。
Java存在自动垃圾回收机制,会自动清除掉垃圾对象,程序员不用担心。
This关键字:
this就是一个变量,可以用在方法中,来拿到当前对象。
this主要用来解决:变量名称冲突问题。
构造器:
和类名一样的方法名,且没有返回值。
特点:创建对象时,对象会去调用构造器。
构造器常见应用场景:创建对象时,同时完成对对象成员变量(属性)的初始化赋值。
注意事项:①类在设计时,如果不写构造器,Java是会为类自动生成一个无参构造器的。②一旦定义了有参数构造器,Java就不会帮我们的类自动生成无参构造器了,此时最好自己手写一个无参数构造器。
面向对象三大特征:封装、继承、多态;
封装:
用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去。
封装设计规范:合理隐藏、合理暴露
Private double score;SetScore方法:赋值;getScore方法:取值;
实体JavaBean:
什么是实体类? → 就是一种特殊形式的类(用于保存数据的Java类,可以用它创建对象,保存某个事务的数据。)
①这个类中的成员变量都要私有,并且要对外提供相应的getXXX,setXXX方法。②类中必须要有一个公共无参的构造器。
实体类有啥应用场景:实体类只负责数据存取,而对数据的处理交给其他类来完成,以实现数据和数据业务处理相分离。(实体类对应的是软件开发里现在比较流行的开发方式,数据和数据的业务处理相分离)
定义类来创建对象使用?