JavaSE学习历程
第一章:Java初识
第二章:Java语言基础
第三章:选择结构与分支结构
第四章:循环结构
第五章:方法/函数
第六章:数组
第七章:面向对象
1 对象
1.1 程序
程序是为了模拟现实世界,解决现实问题而使用计算机语言编写的指令集合.
1.2 对象
面向对象思想(OOP)
一切客观存在的事物都是对象.
任何对象,一定具有自己的特征和行为特征:称为属性,一般为名词,代表对象有什么.
行为:称为方法,一般为动词,代表对象能做什么…
2 类
2.1 类的定义
- 属性:通过变量表示,又称实例变量。
- 语法:数据类型 属性名;
- 位置:类的内部,方法的外部。
- 方法:通过方法表示,又称实例方法。
- 语法:
public 返回值类型 方法名(形参){
//方法的主体
}- 注意:不再书写static,后续详解。
- 在类的属性中直接赋值,实例化的对象就有这个值可以直接使用
- 类属性不赋值,也有默认值存在,默认值与数组的默认值一致.
2.2 类与对象的关系
类:模板(一个)----创建----->对象:实例(多个)
- 类:定义了对象应具有的特征和行为,类是对象的模板。
- 对象:拥有多个特征和行为的实体,对象是类的实例。
public class Dog {
// 定义属性(名称、性别、岁数、颜色、品种)
//在类的属性中直接赋值,实例化的对象就有这个值可以直接使用
//类属性不赋值,也有默认值存在,默认值与数据的默认值一致.
//String name = "张三";
String name;
String sex;
int age;
String color;
String Varieties;
/**
*
* 叫
*/
public void bark() {
System.out.println("狗吠");
}
/**
* 玩
*/
public void play() {
System.out.println("游戏");
}
/**
* 睡
*/
public void sleep() {
System.out.println("打呼噜");
}
}
public class TestDog {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建对象,实例化狗类
Dog myDog = new Dog();
//狗类属性赋值
myDog.name = "啦啦";
myDog.age = 2;
myDog.color = "灰色";
myDog.sex = "雄性";
myDog.Varieties = "中华田园犬";
System.out.println("我有一条"+ myDog.Varieties+"叫"
+myDog.name+",它是"+myDog.sex+",毛色为"+myDog.color+",今年"+myDog.age+"岁了!");
myDog.bark();
myDog.play();
myDog.sleep();
}
}
3 类得组成
3.1 实例变量
局部变量,必须赋值再使用,否则编译错误.
实例变量:未赋值就被调用,不会产生编译错误,实例变量有默认值.实例变量的默认值
- 整数:0
- 小数:0.0
- 字符:''--->\u0000--->空字符
- 布尔:false
- 其他:null
3.2 实例变量与局部变量的区别
局部变量 | 实例变量 | |
---|---|---|
定义位置 | 方法或方法内的结构当中 | 类的内部,方法的外部 |
默认值 | 无默认值 | 字面值(与数组相同) |
使用范围 | 从定义行到包含其结构体结束 | 本类有效 |
命名冲突 | 不允许与局部变量名重名 | 不允许与实例变量重名,可与局部变量名重名,局部变量优先 |
3.3 实例方法
- 对象的实例方法包含两部分:方法的声明和方法的实现.
- 方法的声明:
- 代表对象能做什么
- 组成:修饰符 返回值类型 方法名(形参列表)
- 方法的实现:
- 代表对象怎么做:即如何实现对应的功能
- 组成:{逻辑代码}
4.4 案例
定义学生类: - 属性:姓名(name)、年龄(age)、性别(sex)、分数(score) -
方法:打招呼(sayHi) //打印学生所有信息 - 创建多个学生对象,为其各个属性赋值,并调用方法
public class TestStudent {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 创建对象
Student str = new Student();
// 给对象赋值
str.name = "张三";
str.age = 18;
str.sex = "男";
str.score = 59.6;
// 调用方法
str.sayHi(str);
}
}
class Student {
//定义属性
String name;
int age;
String sex;
double score;
//定义方法
public void sayHi(Student str) {
System.out.println("我是"+str.name+",今年"+str.age+"岁了,"+str.sex+"性"+",成绩:"+str.score);
}
}
4 方法重载
4.1 方法重载概念
现实生活中存在一些情况,对象的同一种行为可能存在多种实现过程,例如:吃饭和吃药的过程就存在差异
到底采用哪种实现过程,需要取决于调用者给定的参数.
4.2 方法的重载(Overload)
重载(Overload):一个类中定义多个相同名称的方法。
要求:
- 方法名称相同。
- 参数列表不同(类型、个数、顺序)。
- 与访问修饰符、返回值类型无关。
调用带有重载的方法时,需要根据传入的实参去找到与之匹配的方法。
好处:灵活、方便、屏蔽使用差异。
只是参数名称的不同,不能构成方法的重载
public class TestCal {
public static void main(String[] args) {
// TODO Auto-generated method stub
//实例化对象
Cal myCal = new Cal();
int a=1,b=2,c=3,d=4;
//调用方法
System.out.println(a+"+"+b+"="+myCal.add(a, b));
System.out.println(a+"+"+b+"+"+c+"="+myCal.add(a, b,c));
System.out.println(a+"+"+b+"+"+c+"+"+d+"="+myCal.add(a, b,c,d));
}
}
class Cal {
//定义二参数方法,使用方法的重载
public int add(int a,int b) {
return a+b;
}
//定义三参数方法
public int add(int a,int b,int c) {
return a+b+c;
}
//定义四参数方法
public int add(int a,int b,int c,int d) {
return a+b+c+d;
}
}
5 构造方法
5.1 构造方法
构造方法:类中的特殊方法,主要用于创建对象。
特点:
- 名称与类名完全相同。
- 没有返回值类型。
- 创建对象时,触发构造方法的调用,不可通过句点手动调用。
- 如果没有在类中显示定义构造方法,则编译器默认提供无参构造方法。
5.2 对象的创建
对象的创建过程:
- 内存中开辟对象空间
- 为各个属性赋予初始值
- 执行构造方法中的代码
- [将对象的地址赋值给变量]
5.3 对象的内存分配
创建对象时,内存中存储的是对象变量名(引用)中保存对象的地址,通过变量中的地址访问对象的属性和方法。
5.4 构造方法的重载
构造方法的重载,遵循重载规则
创建对象时,根据传入参数,匹配对应的构造方法。
5.5 默认构造方法
- 在类中,如果没有显示定义构造方法,则编译器默认提供无参构造方法.
- 如已手动添加有参构造方法,则无参构造方法不再默认提供,可根据需求自行添加.
5.6 构造方法为属性赋值
- 创建对象的同时,将值传入构造方法
- 由构造方法为各个属性赋值
5.7 案例
构造方法重载,并进行实例化
package com.xx;
/**
* @Title: Demo08.java
* @Description: TODO:构造方法重载,并进行实例化
* @since JDK1.8
*/
public class Demo08 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//实例化对象
Stu str = new Stu();
//创建对象的同时,将值传入构造方法,由构造方法为各个属性赋值
Stu str2 = new Stu("张三");
Stu str3 = new Stu("张三",18);
Stu str4 = new Stu("张三",18,"男");
Stu str5 = new Stu("张三",18,"男",56.3);
}
}
class Stu {
// 定义属性
String name;
int age;
String sex;
double score;
//构造方法的重载
// 无参数构造方法
public Stu() {
System.out.println("我是无参数构造方法");
}
//一参数构造方法
public Stu(String n) {
name = n;
age = 18;
sex = "男";
score = 56.3;
System.out.println("我是一参数构造方法");
System.out.println("姓名:"+name);
}
//二参数构造方法
public Stu(String n,int a) {
name = n;
age = a;
sex = "男";
score = 56.3;
System.out.println("我是二参数构造方法");
System.out.println("姓名:"+name+"年龄:"+a);
}
//三参数构造方法
public Stu(String n,int a,String s) {
name = n;
age = a;
sex = s;
score = 56.3;
System.out.println("我是三参数构造方法");
System.out.println("姓名:"+name+"年龄:"+a+"性别:"+s);
}
//四参数构造方法
public Stu(String n,int a,String s,double sc) {
name = n;
age = a;
sex = s;
score = sc;
System.out.println("我是四参数构造方法");
System.out.println("姓名:"+name+"年龄:"+a+"性别:"+s+"成绩:"+sc);
}
}
6 this关键字
6.1 this关键字
- 类是模板,可服务于此类的所有对象;
- this是类中的默认引用,代表当前实例;
- 当类服务于某个对象时,this则指向这个对象
6.2 this关键字的两种用法
6.2.1 第一种用法
this第一种用法:调用实例属性、实例方法。如:this.name、this.sayHi()。
- 当实例变量和局部变量重名时,优先访问局部变量。
- 此时,如需访问实例变量,需要增加this.前缀。
- 不存在重名时,则可省略this。
6.2.2 第二种用法
this第二种用法:调用本类中的其他构造方法,只能使用在构造方法之中,不能调用普通方法。如:this()、this(实参)。
- this():调用无参构造
- this(实参):调用有参构造
- 注:必须在构造方法的首行
this()和super()为调用构造方法,作用是在JVM堆中构建出一个对象。因此避免多次创建对象,同一个方法内只能调用一次this()或super()。同时为了避免操作对象时对象还未构建成功,需要this()和super()的调用在第一行实现【以此来创建对象】,防止异常。
6.3 案例
使用this调用本类属性和方法
package com.xx;
/**
* @Title: Demo09.java
* @Description: TODO:使用this调用本类属性和方法
* @since JDK1.8
*/
public class Demo09 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//实例化对象
Stud str = new Stud("张三");
Stud str2 = new Stud("张三",18);
Stud str3 = new Stud();
}
}
class Stud {
// 定义属性
String name;
int age;
//无参构造方法
public Stud() {
String name = "李四";
this.name = "张三";
System.out.println("未使用this调用-->姓名:" + name);
System.out.println("使用this调用-->姓名:" + this.name);
}
// 一参数构造方法
public Stud(String name) {
//this调用本类属性
this.name = name;
System.out.println("我是一参数构造方法");
System.out.println("姓名:" + name);
}
// 二参数构造方法
public Stud(String name, int age) {
//this调用本类一参数构造方法且必须在构造方法的首行
this(name);
this.age = age;
System.out.println("我是二参数构造方法");
System.out.println("姓名:" + name + "年龄:" + age);
}
}
7 总结
类是代码的容器;
类就是对象的模板(抽象)—>对象:类的实例,拥有多个特征(属性)和行为(方法);
方法重载规则:方法名相同,参数类型个数顺序不同,与访问修饰符和返回值无关;
方法重载调用:根据实参的类型个数顺序来决定调用哪个重载的方法!
构造方法:类中特殊方法,主要用于创建对象
特点:
1.方法名与类名完全相同
2.没有返回值类型
3.创建对象时,触发构造方法的调用,不可通过 .方法名 进行手动调用.
4.如果类中没有显示定义构造方法,则编译器默认提供无参构造方法;
5.若定义了构造方法,编译器不再提供无参构造方法,强烈建议手动写上无参构造方法.