1.方法:就是完成特定功能的代码块。
2.格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {
方法体;
return 返回值;
}
-修饰符:目前就写public static
-返回值类型:用于限定返回值的数据类型
-方法名:方便我们调用方法
-参数类型:
–形式参数 接收实际参数的变量(定义时候的)
–实际参数 实际参与运算的变量(调用时候的)
-方法体:完成功能的代码。
-返回值:就是功能的返回结果。
-return 返回值:结束方法,把返回值带给调用者。
3.书写方法时做到两个明确:
-参数 参数的个数,以及类型
-返回值 有无返回值,以及结果的数据类型
4.方法的注意事项:
-方法不调用不执行
-:方法与方法是平级关系,不能嵌套定义
-方法定义的时候参数之间用逗号隔开
-方法调用的时候不用在传递数据类型
-如果方法有明确的返回值,一定要有return带回一个值
需求:写一个功能实现返回两个数的较大值。
public static int getMax(int a,int b){
int c = (a>b)?a:b;
return c;
}
需求:输出i行j列的星形。
public static void printStar(int row,int col){
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
System.out.print("*");
}
System.out.println();
}
}
1.方法重载:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
2.方法重载特点
-与返回值类型无关,只看方法名和参数列表
-在调用时,虚拟机通过参数列表的不同来区分同名方法
需求:比较两个数据是否相等。参数类型分别为两个byte类型,两个short类型,两个int类型,两个long类型。
public class FunctionOverload2 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(isEquals(a, b));
}
public static boolean isEquals(byte a,byte b){
System.out.println("比较两个byte类型的数据是否相等");
return a==b;
}
public static boolean isEquals(short a,short b){
System.out.println("比较两个short类型的数据是否相等");
return a==b;
}
public static boolean isEquals(int a,int b){
System.out.println("比较两个int类型的数据是否相等");
return a==b;
}
public static boolean isEquals(long a,long b){
System.out.println("比较两个long类型的数据是否相等");
return a==b;
}
}
1.数组:数组是存储同一种数据类型多个元素的集合
注意:数组既可以存储基本数据类型,也可以存储引用数据类型
2.数组的定义格式
-数据类型[] 数组名;
int[] arr;
-数据类型 数组名[];
int arr[];
3.数组初始化:
-动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
初始化时只指定数组长度,由系统为数组分配初始值。
格式:
数据类型[] 数组名 = new 数据类型[数组长度];
-:静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
初始化时指定每个数组元素的初始值,由系统决定数组长度。
格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
简化格式:
数据类型[] 数组名 = {元素1,元素2,…};
4.数组内存图
5.数组操作常见的两个小问题
-ArrayIndexOutOfBoundsException:数组索引越界异常
–产生:你访问了不存在的索引。
–解决:修改你的访问索引。
-NullPointerException:空指针异常
–产生:引用已经不再指向堆内存
–解决:一般来说,只要是引用类型的变量,我们在使用前,都要先判断是否为null。
如果不为null,才继续使用。
需求:数组遍历:依次输出数组中的每一个元素。
for(int x=0; x<数组名.length; x++) {
System.out.println(数组名[x]);
}
1.类:是一组相关的属性和行为的抽象
2.对象:是该类事物的具体体现
例如:
对象:张三
类:学生
3.类的组成:
-成员变量 类中方法外的变量
-成员方法 没有static修饰的方法
需求:编写一个学生类。
public class Student {
//成员变量
String name;
int age;
//成员方法
public void sleep(){
System.out.println("学生需要睡觉");
}
public void study(){
System.out.println("学生需要学习");
}
}
需求:编写一个手机类。
public class Phone{
String brand;
int price;
public void call(){
System.out.println("手机可以打电话");
}
public void sendMessage(){
System.out.println("手机可以发短信");
}
}
4.类的使用:使用一个类,其实是使用该类的成员(变量和方法)。
我们要想想用一个类的成员,就必须创建该类的对象。
格式:
类名 对象名 = new 类名();
5.对象的使用:
成员变量:
对象名.变量;
成员方法:
对象名.方法名(...);
需求:写出手机类的测试类。
public class PhoneTest {
public static void main(String[] args) {
Phone p = new Phone();
p.brand = "vivo";
p.price = 2000;
p.color = "white";
System.out.println(p.brand);
System.out.println(p.price);
//调用成员方法
p.call();
p.playGame();
}
}
//定义一个手机类
class Phone{
String brand;
int price;
String color;
public void call(){
System.out.println("手机可以打电话");
}
public void sendMessage(){
System.out.println("手机可以发短信");
}
}
1.在类中的位置不同
成员变量 类中方法外
局部变量 方法内或者方法声明上
2.在内存中的位置不同
成员变量 堆内存
局部变量 栈内存
3.生命周期不同
成员变量 随着对象的存在而存在,随着对象的消失而消失
局部变量 随着方法的调用而存在,随着方法的调用完毕而消失
4.:初始化值
成员变量 有默认初始化值
局部变量 没有默认初始化值
数据类型:
-基本类型:4类8种。
基本类型实际参数传递的时候传递的是这个基本类型的具体的值。
-引用类型:类,接口,数组
引用类型进行参数传递的时候,传递的是该引用类型的实例对象说白了就是这个对象的地址值。
1.匿名对象:就是没有名字的对象,是对象一种简写形式。
2.应用场景:
-调用方法(对象调用方法仅仅一次的时候)
-作为实际参数传递
package com.edu_01;
class Student{
public void show(){
System.out.println("student的show方法");
}
}
class StudentDemo{
public void method(Student s){
//需要的实际参数一定是Student类的对象的的地址值
s.show();
}
}
public class StudentTest {
public static void main(String[] args) {
/* //现在需要调用StudentDemo中的method()方法
StudentDemo sd = new StudentDemo();
//需要的实际参数一定是Student类的对象的的地址值
Student s = new Student();
sd.method(s);*/
//想调用我现在需要调用StudentDemo中的method()方法
//使用匿名对象调用方法,并传递参数
new StudentDemo().method(new Student());
}
}