目录
- 面向对象
- 一.类
- 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("调用了带参数的构造方法");}
如上会形成闭环,造成错误。
码字不易,感谢观看
如果对你有帮助的话,记得点赞👍评论+关注吧