JAVA学习 Day4
回顾
数组: 3种初始化方式
长度length, 长度不可变
引用类型 -> 堆
访问, index: 0~length-1
内存图: 非常重要
方法:
修饰词 返回值类型 名字(参数列表) {方法体}
方法签名: 方法名+参数列表
返回值: return
调用: 执行方法体
JVM:
方法区: 类加载后的信息
栈: 临时变量\局部变量
堆: 引用的数据
方法参数: 基本数据类型, 就是传递的是值
引用类型, 传递的是引用-地址
1.面向对象
OOP Object Oriented Programming
一切皆对象, Java操作的基本单位就是对象
类/类型: 所有同种对象共同的特征和行为, 抽象出来成为类
对象: 符合类的实例化个体
玩家特征: - 属性/成员变量
玩家名 帐号
玩家行为: - 成员方法
打开steam 玩游戏
以上抽象出一个概念: 类 - 玩家, 实体类
对象: 符合类的特征的独立个体
类和对象的关系: 先定义/声明 类, 然后再创建对象
class: 类 类型 和int功能一样
使用对象的步骤:
1.必须先有类
class Player {
成员变量 username account
成员方法
}
2.才能创建对象 - main - 方法 - 存在于类中
Player p = new Player();
3.有了对象, 对象包含了成员变量(username和account)和成员方法
使用: 用 . 来调用的
局部变量和成员变量的区别
1.声明位置
局部变量: 方法中
成员变量: 类中
2.初始化
局部变量: 使用前必须初始化
成员变量: 可以初始化, 如果没有初始化, 会有默认初始值
3.个数
局部变量: 声明个数
成员变量: 由对象决定, 有几个对象就有几个成员变量
4.内存中的位置
第一次使用类[创建类的对象]之前, 会先将类进行加载
局部变量: 方法栈中, 方法结束, 局部变量消失
成员变量: 跟对象一起, 在堆中
2.方法重载
方法名一样, 参数列表不一样的几个方法
跟返回值类型无关
举例: println print
参数列表不一样的情况: 个数不同\类型不同\顺序不同
(int a)
(double d)
(int a, int b)
(int b, int a) ×
(int a, float b)
(float b, int a)
public class Overload {
public static void main(String[] args){
Overload k = new Overload(); // 创建对象 - 引用类型
// 使用对象的成员方法
k.game("1");
k.game("我", "怪物猎人");
k.play(1000);
k.play(0, (double)100000);
k.play( 11110.1, 1);
}
void game(String b, String a){
System.out.println(b + "正在玩" + a);
}//成员方法
void game(String a){
System.out.println("打开steam");
}
void play(int a){
System.out.println("游玩时间" + a + "小时");
}
void play(int a, double b){
System.out.println(a + "号玩家分数为" + b);
}
void play(double a, int b){
System.out.println(a + "分数为第" + b + "名");
}
int pay(int a){
a = a * 10;
return a;
}
}
3.构造方法/构造器:
目的: 为了给成员变量初始化
特点: 方法名要和类名一致
没有返回值类型
构造方法可以重载
当类中没有定义构造方法时, 编译器会默认添加无参构造方法
4.this
this:
表示当前对象 - 这个对象
哪个对象调用方法, 就表示哪个对象
this可以调用自己的成员变量, 当成员变量和临时变量重名时, this不能省
this也可以调用自己的成员方法, this可以省略
this也可以调用自己的构造方法, this(参数), this不能省
this(参数);只能放在构造方法的第一行
public class Maincx {
public static void main(String[] args){
Game a = new Game();
Game b = new Game("怪物猎人世界", 375, 1, "multiplayer act", new Player("hzt", "1315782936"));
Game s = new Game("黎明杀机", 69, 2, "confrontation", new Player("hzt", "1315782936"));
System.out.println(s);
}
}
// 1.定义类
public class Player {
// 2.定义成员变量
String username;
String account;
// 3.定义有参构成方法
Player(String username, String account){
this.username = username;
this.account = account;
}
}
public class Game {
String name;
int price, number;
String type;
void play(String username ,String name){
System.out.println(username + "正在玩" + name);
}
//构造方法名与类名相同
Game(){
this("杀戮尖塔", 24, 3, "card", new Player("hzt", "1315782936"));
//使用空参构造方法调用有参构造方法,空参有参可以互相调用但不能同时调用
//如果自定义的了构造方法,那么默认加的空参构造方法需要手动写出
}
//用于给类的属性赋值
Game(String name, int price, int number, String type, Player p){
this.name = name; //this指当前对象,用于优化可读性
this.price = price;
this.number = number;
this.type = type;
play(p.username, this.name);
}
}
NullPointerException: 空指针异常
产生原因: 调用了null空值得 成员变量 或者 方法
引用类型的数组
使用步骤:
1.给数组初始化
Student[] ss = new Student[5]; // 默认值都是null
2.给数组元素初始化
ss[0] = new Student();
ss[1] = new Student();
…
3.如果直接给ss[index].属性赋值会导致空指针异常,原因是ss[index]为引用变量默认值为null
5.命名规则:
1.只能出现:英文 + 数字 + _ + $
2.不能以数字开头
3.变量名:可读性好、首字母小写、第二个单词开始首字母大写
4.包名:全部小写,域名倒写
www.baidu.com
com.baidu.zhidao.xx.xx
com.baidu.baike.xx.xx
5.方法名: 首字母小写、第二个单词开始首字母大写 - 驼峰命名法
长度不限, 但是一定要可读性好
6.类名: 驼峰命名法, 首字母大写
System Scanner Math Arrays
上一篇: Day4 作业
下一篇: java学习day4