就是完成特定功能的代码块
基础格式
方法的定义:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {
方法体语句;
return 返回值;
}
方法的调用: 方法名(参数)
修饰符:目前就用 public static。后面再详细讲解其他修饰符
返回值类型:就是功能结果的数据类型
方法名:就是起了一个名字,方便我们调用该方法。
参数类型:就是参数的数据类型
参数名:就是变量
参数分类:
实参:实际参与运算的数据
形参:方法上定义的,用于接收实际参数的变量
方法体语句:就是完成功能的代码块
return:结束方法
返回值:就是功能的结果,由return带给调用者。
必须明确的两点:
返回值类型就是返回结果的数据类型
参数列表中参数的个数及对应的数据类型
示例
//有返回值的方法
public class Test {
//程序入口
public static void main(String[] args) {
int n = add(5, 7);//方法的调用
System.out.println(n);//12
}
//自定义两个数的加法, 返回值类型为int,需要两个int参数
public static int add(int x ,int y){
return x + y;
}
}
/**
简易程序流程:
1.方法区加载class文件
2.JVM调用main方法入栈
3.main方法执行,定义变量n,调用add(),传参
4.add方法入栈,执行add方法,返回结果,add方法弹栈
5.继续执行main方法的代码
6.main执行结束弹栈
*/
方法重载
重载:在同一个类中,方法名相同,参数列表不同,与返回值无关,与修饰符无关
参数列表不同:参数个数不同,参数类型不同,参数顺序不同
public static void main(String[] args) {
int ret1 = add(1, 2);
System.out.println(ret1);//3
int ret2 = add(1, 2,3);
System.out.println(ret2);//6
}
//计算两个数的和
public static int add(int a , int b) {
return a + b;
}
//计算三个数的和
public static int add(int a , int b,int c) {
return a + b + c;
}
方法参数的传递
Java中只有值传递
基本类型:参数传递的是值,形式参数的改变不影响实际参数
引用类型:参数传递的也是值,不过这个值是复制的引用,形式参数的改变直接影响实际参数
public static void main(String[] args) {
String c = "d";
int [] arr = {1,2,3,4};
add(c,arr);
System.out.println(arr[2]); //100
System.out.println(c); //d
}
//传入字符串和数组作为参数,并修改值
public static void add(String s,int[] arr) {
s = "s";
arr[2] = 100;
}
类的定义
定义:
public class 类名{
成员变量:
修饰符 数据类型 变量名 = 值
成员方法:
修饰符 返回值类型 方法名(参数列表){
局部变量:
修饰符 数据类型 变量名 = 值
}
}
对象的创建
类型 对象名 = new 类名()
成员变量:
定义在类中,方法体之外的变量,
在内存中存储在堆内存中
随对象创建而创建,随对象的销毁而销毁
有默认值
局部变量:
定义在方法体中
存储在栈内存中
对方法的调用而创建,随着方法的结束而消亡
没有默认值
public class Demo {
//定义属性
String name = "N";
String sex = "未知";
int age = 0;
//定义方法
public void out() {
System.out.println("方法");
}
}
public class Test {
public static void main(String[] args) {
Demo demo = new Demo(); //创建对象
System.out.println(demo.age);//属性调用
demo.age = 10;//属性修改
System.out.println(demo.age);//10
demo.out();//方法调用
}
}
ArrayList集合类的使用
1.导入包 import java.util.ArrayList;
2.创建集合
3.调用结合
集合中只能存储引用类型,对于基本类型会有装箱类型的自动转化;数组可以存储基本类型,也可以存储引用类型
集合中可以存储不同的类型的引用,数组只能存储同一类型的元素
集合长度可变,数组长度固定
Demo demo = new Demo();
Demo demo2 = new Demo();
ArrayList a = new ArrayList();
a.add(demo);
a.add(demo2);
a.add(1);
System.out.println(a);
//[javaee.Demo@7852e922, javaee.Demo@4e25154f, 1]
System.out.println(a.get(2));//1
System.out.println(a.size());//3
//add(oniect)添加集合元素
//get(int index)根据索引下标获取元素,下标从0开始
//size()获取集合中元素个数
//集合的遍历
for(int i = 0; i < a.size(); i++) {
System.out.println(a.get(i));
}
//用泛型约束集合元素为同一类型,用增强for遍历
ArrayList<String> a = new ArrayList<String>();
a.add("a");
a.add("b");
a.add("c");
for(String string : a) {
System.out.println(string);
}
// 其余方法
a.add(3,"d"); //在指定下标出添加元素
a.remove(1);//根据下标删除元素
a.set(1, "f");//根据下标修改元素
a.clear();//清空集合元素
ASCII编码
计算机只能识别由高低电平转换的0,1信号
为了识别文字,制定了文件符号与0,1信号的对照表ascii
十进制的97对应ASCII中的a
十进制的65对应ASCII中的A
ASCII不兼容中文
中国制作了属于自己的编码表gbk/gbk2312等等
之后出现兼容所有国家文字的万国码unicode
对相同的字符,unicode占用的资源大于其他编码,不利于传输
在unicode的基础上出现了UTF-8(常用),UTF-16
unicode是兼容ASCII
'a' + 1 //char类型与int类型相加,会去ASCII吗查询得到一个整数再与int值相加
‘怒’ //char存储中文,查询unicode吗
所以char的范围就是ASCII的范围,即0 - 65535
一般二进制数的最高位0,1表示符号位,即正数/复数
char没有符号位,全是数值,所以char不能表示负数
//输出26个大小写字母
char c1 = 'a';
char c2 = 'A';
for(int i = 1;i <= 26;i++) {
System.out.println(c1 + " " + c2);
c1 += 1;
c2 += 1;
}
数据类型在内存中的存储位置
在类中声明的成员变量:
对象都是存储在堆内存中
引用类型的变量存储在堆中,值为引用对象的内存地址
基本类型的变量存储在堆中
随着对象的创建而产生,随着对象的销毁而销毁
在方法中声明的变量:
方法加载后被存储到方法栈中,方法中的变量都是局部变量,随着方法的结束就会被销毁
引用类型的变量存储在方法栈中,值为引用对象的内存地址执行堆中存在的对象内存空间
基本类型的变量存储在方法栈中