目录
- 面向对象
- 一.类
- 1.类的创建
- ==默认初始化==
- 2.类的实例化
- 3.注意事项
- ==利用类的创建来交换值==
- 二.this
- 1.使用this
- 2.可使用this来调用其他构造方法来简化
- 三.构造方法
- 3.1概念
- 3.2特性
- 3.3不带参数的构造方法
- 3.4带参数的构造方法
- ==当使用自定义的构造方法后,再删除时,再new则编译不通过==
- 3.3可使用this来调用其他构造方法来简化
- 前提
面向对象
Java是一门面向对象的语言,面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。
一.类
1.类的创建
命名规则: 大驼峰
class为定义类的关键字,ClassName为类的名字,{}中为类的主体。
类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法。
定义一个狗类
class Dog{
//属性,字段,成员变量:这些是定义在方法外部,类内部的
public String name;
public int age;
//成员方法
public void dogSay(){
System.out.println("wangwangwang");
}
}
采用Java语言将狗类在计算机中定义完成,经过javac编译之后形成.class文件,在JVM的基础上计算机就可以识别了。
在定义一个类时,一般包含成员变量和成员方法。
默认初始化
在成员变量未初始化时,会默认初始化为其对应的0值
2.类的实例化
用类类型创建对象的过程,成为类的实例化
分为两步
1.为对象分配内存
2.调用合适的构造方法
Date date = new Date();
3.注意事项
1.一个文件一般只定义一个类
2.main方法所在的类一般要使用public修饰
3.public修饰的类必须要和文件名相同
1.引用不可以指向引用
这代表两个引用数据类型指向同一个对象
Dog dog1 = new Dog();
Dog dog2 = dog1;
//相当于
int[] arr1 ={1,2,3};
int[] arr2 = arr1;
2.一个引用不能指向多个对象
** 3.引用=null**
不代表指向null,而是代表这个引用不指向任何对象。
利用类的创建来交换值
因为基本数据类型是不能交换的
class MyValue{
public int val;
}
public class test {
public static void swap(MyValue val1,MyValue val2){
int temp = val1.val;
val1.val = val2.val;
val2.val = temp;
}
public static void main(String[] args) {
MyValue myValue1 = new MyValue();
myValue1.val = 10;
MyValue myValue2 = new MyValue();
myValue2.val = 20;
swap(myValue1,myValue2);
System.out.println(myValue1.val);;
System.out.println(myValue2.val);;
}
}
swap创造出形参 val1 和 val2 ,此时他们的类型也是MyValue。
利用temp进行交换。
这里注意val1 和 vla2 形参 形参 形参 !!!
二.this
由于局部变量优先使用,在进入setDate中时,public void setDate(int year,int month,int day),括号里面的属于局部变量,优先使用,造成的结果就是 year(你输入的) = year; 如下图
public class Date {
public int year;
public int month;
public int day;
public void setDate(int year,int month,int day){
year = year;
month = month;
day = day;
}
public void ptintDate(){
System.out.println("年:"+year+"月:"+month +"日:"+day);
}
public static void main(String[] args) {
Date date = new Date();
date.setDate(1945,9,1);
date.ptintDate();
}
}
由于优先使用局部变量的条件,编译并不能通过这时就需要使用this
1.使用this
加上this就可以成功赋值了。
谁调用当前方法,谁就是this
public void setDate(int year,int month,int day){
this.year = year;
this.month = month;
this.day = day;
}
2.可使用this来调用其他构造方法来简化
构造方法中讲解
三.构造方法
3.1概念
:构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。
3.2特性
- 名字必须与类名相同
- 没有返回值类型,设置为void也不行
- 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
- 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)
3.3不带参数的构造方法
是在new的过程中调用的
一般使用public修饰,方法名和类名一样,没有返回值,void也不行。
在创建对象时,由编译器自动调用,并在对象的生命周期中只调用一次。
public class Date {
public int year;
public int month;
public int day;
public Date(){
this.year = 2008;
this.month = 8;
this.day = 8;
System.out.println("执行了不带参数的构造方法");
}
public static void main(String[] args) {
Date date = new Date();
}
}
3.4带参数的构造方法
public class Date {
public int year;
public int month;
public int day;
public Date(int year,int month,int day){
this.year = year;
this.month = month;
this.day = day;
}
public static void main(String[] args) {
Date date2 = new Date(1999,45,3);
}
}
当使用自定义的构造方法后,再删除时,再new则编译不通过
参考特性第三条
3.3可使用this来调用其他构造方法来简化
public Date(){
this(1988,8,8);//这里调用了带参数的Date方法
System.out.println("调用了不带参数的构造方法");
}
public Date(int year,int month,int day){
this.year = year;
this.month = month;
this.day = day;
System.out.println("调用了带参数的构造方法");
}
public void print(){
System.out.println("年:"+year+ "月:"+month+ "日"+day);
}
public static void main(String[] args) {
Date date = new Date();
date.print();
}
前提
1前面不能有其他语句,如果有则报错。
public Date(){
System.out.println("调用了不带参数的构造方法");
this(1988,8,8);
}
2.不能形成闭环,例如在Date()中调用带参数的,而在带参数中右调用Date()
public Date(){
// this.year = 2008;
// this.month = 8;
// this.day = 8;
this(1988,8,8);
System.out.println("调用了不带参数的构造方法");
}
public Date(int year,int month,int day){
this();
this.year = year;
this.month = month;
this.day = day;
System.out.println("调用了带参数的构造方法");
}
如上会形成闭环,造成错误。
码字不易,感谢观看
如果对你有帮助的话,记得点赞👍评论+关注吧