赞
踩
目录
对象:真实存在的一个实体。在java中,一切事物皆为对象
面向对象:对象与对象之间相互协作来完成,注重的是对象。
例如,用洗衣机洗衣服,人只要放入衣服-->倒入洗衣液-->选择模式,启动洗衣机
这个过程的主要是:人、衣服、洗衣液、洗衣机四个对象相互协作完成就好。注重的是对象之间的相互协作。
面向过程:注重的是过程
例如,我们自己洗衣服,
放衣服到盆里,装水-->将衣服浸湿,使用洗衣服,揉搓>放入水中-->拧干-->放入水中-->拧干
这个过程我们注重的是过程
类:对一个对象的描述。描述对象的属性(尺寸,颜色、型号)和功能。
比如:一瓶水
属性:什么颜色、多少毫升,什么品牌......
功能:解渴......
- class ClassName{
- field;//字段(属性)或成员变量;
- method;//行为或成员方法;
- }
class为定义类的关键字,ClassName为类的名字,{}为类的主体
属性是用来描述类的(颜色、尺寸、容量);
方法用来描述功能的;
- class Paper{
- //属性
- public String brand;
- public String type;
- public double length;
- public double width;
- public double weight;
- public String color;
- //方法
- public void wipeMouth(){
- System.out.println("擦嘴");
- }
- public void wipeHands(){
- System.out.println("擦手");
- }
- }
错误示范:
正确示范:
类的实例化:由类生成对象的过程叫做类的实例化
- class Dog{
- public String color;
- public int age;
- public String name;
- public void barks(){
- System.out.println(name+"会汪汪叫~");
- }
- }
- public class Test2 {
- public static void main(String[] args) {
- Dog dog=new Dog();
- dog.age=2;
- dog.name="小白";
- dog.color="white";
- dog.barks();
- Dog dog1=new Dog();
- dog1.age=3;
- dog1.name="小黑";
- dog1.color="black";
- dog1.barks();
- }
- }
this引用:指当前对象(成员方法运行时,调用该成员方法的对象),在成员中,所有成员的变量操作,都是通过该引用的问题
下面我写了一个关于日期的
- 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 printDate(){
- System.out.println(year+"."+month+"."+day);
- }
- }
- public class Test3 {
- public static void main(String[] args) {
- Date d1=new Date();
- Date d2=new Date();
- Date d3=new Date();
- d1.setDate(2024,1,1);
- d2.setDate(2024,2,2);
- d3.setDate(2024,3,3);
- d1.printDate();
- d2.printDate();
- d3.printDate();
- }
- }
1.从上面代码中,我们可以发现,在定义成员方法时,有一个成员的方法的形参和实参是一样的
在这种情况下,他是表示形参的值给形参,实参给实参还是我们想要的实参的值给形参?
我们来查看一下结果:
为什么会是以上的结果?
我们可以知道成员变量或方法会有一个默认值
遵循的规则:如果是引用变量类型,默认值为null;
如果是基础数据类型,默认值为0;
也就是说他是形参自己赋值给自己的结果,遵守的是局部变量优先的原则
2.现在我将代码进行局部修改一下
变成这样,好了,这样好像看起来没有任何的问题
- class Date{
- public int year;
- public int month;
- public int day;
- public void setDate(int y,int m,int d){
- year=y;
- month=m;
- day=d;
- }
- public void printDate(){
- System.out.println(year+"."+month+"."+day);
- }
- }
- public class Test3 {
- public static void main(String[] args) {
- Date d1=new Date();
- Date d2=new Date();
- Date d3=new Date();
- d1.setDate(2024,1,1);
- d2.setDate(2024,2,2);
- d3.setDate(2024,3,3);
- d1.printDate();
- d2.printDate();
- d3.printDate();
- }
- }
我们查看结果,结果好像也并没有毛病:
咦,但是仔细想想发现,setDate如何知道自己要设置哪个对象和printDate是如何知道自己要打印哪个对象的呢,他们到底是如何判断自己的当前对象的呢?
那么我们接下来可以使用this引用来解决这些问题
this引用成员方法中的成员对象
现在通过this引用将代码修改一下
- class Date{
- public int year;
- public int month;
- public int day;
- public void setDate(int year,int month,int day){
- this.year=year;
- this.month=month;
- this.day=day;
- }
- public void printDate(){
- System.out.println(this.year+"."+this.month+"."+this.day);
- }
- }
- public class Test3 {
- public static void main(String[] args) {
- Date d1=new Date();
- Date d2=new Date();
- Date d3=new Date();
- d1.setDate(2024,1,1);
- d2.setDate(2024,2,2);
- d3.setDate(2024,3,3);
- d1.printDate();
- d2.printDate();
- d3.printDate();
- }
- }
其结果如下:
我们通过调试可以发现,this引用可以更好的指向当前的对象
1.可以通过this访问当前对象的成员方法中的成员变量;
2.可以通过this访问当前对象的非静态成员方法,不可以访问非静态成员方法。
如何区分静态和非静态成员方法?
看有无static,如果有static,那么就是静态成员方法;无static,就是非静态成员方法
3.可以通过this访问当前对象的其他构造方法。
那么什么是构造方法?接下来会解释。
构造方法:也称为构造器,是一种特殊的成员方法 。名字与类名必须相同,在创建对象时,由编译器自动调用,并且整个对象的生命周期只有一次。
我们知道在java类内部定义一个局部变量,要进行初始化。
而成员变量变量或方法会有自己的默认值。那我每实例化一个对象,就要进行初始化,我们应该怎么进行初始化?
所以我们就要用到构造方法,构造方法的作用就是初始化对象当中的成员
修饰符 方法名称(参数类型形参){
方法体代码;
}
普通方法的定义格式
修饰符 返回值类型 方法名称(参数类型形参){
方法体代码;
return 返回值(如果是void的类型,不用return);
}
区别
- 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;
- System.out.println("调用三个参数");
- }
- public void setDate(int year, int month, int day){
- this.year=year;
- this.month=month;
- this.day=day;
- }
- public void printDate(){
- System.out.println(this.year+"."+this.month+"."+this.day);
- }
- }
- public class Test_0715 {
- public static void main1(String[] args) {
- int a=1;
- System.out.println(a);
- }
- public static void main(String[] args) {
- Date d1=new Date(2024,3,4);
- d1.setDate(2024,1,1);
- d1.printDate();
- }
- }
由图中可以发现:
除了默认初始化,我们还可以就地初始化;
默认初始化:在声明成员变量中,没有赋值的时候,编译器会默认给成员变量一个值。
就地初始化:在成员变量声明或成员方法中,直接初始化 。
- class Cat{
- public String name="小白";
- public int age=1;
- public void mew(){
- System.out.println(name+"喵喵叫~");
- }
- }
- public class Test2 {
- public static void main(String[] args) {
- Cat cat=new Cat();
- cat.mew();
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。