Java学习笔记6-面向对象

                对于小而简单的问题,为了快速,为了方便,你自己会动手从头到尾处理;对于庞大且复杂的问题,你一个人,已经不够用了,时间不够,精力不够,学识也不够,所以你会找其他人来帮忙。而且个个都是专业的,那么问题是不是很快解决了!此时你面对的是你找来的帮手,就可以说你面向对象,这个对象就是你的帮手。

1.面向对象的思考方式

        遇到复杂问题,先从问题中找名词,然后确立这些名词 哪些可以作为类,再根据问题需求确定的类的属性和方 法,确定类之间的关系。

2.对象和类的概念

        对象:是具体的事物

        类:是对对象的抽象类

                可以看做是一个模版,或者图纸,系统根据类的定义来造出对象。

        两者的关系:类是一个抽象的概念,对象是类实例化出来的,对象中含有类的属性,类是对象的抽象

一.类的定义

语法格式:class  类名{

                  }

class是定义类的关键字,类名需要满足命名规则和规范,类的命名应该使用大驼峰命名原则

对与一个类来说,一般有三种常见的成员:属性 field 、方法 method 、构造器 constructor(在后面笔记中) 。这三 种成员都可以定义零个或多个。

//实例代码-定义一个汽车类
public class Class003_Car {
    //分析特性 颜色\价格\品牌
    //定义成员变量(也叫类的属性)
    public int money;
    public String color;
    public String barand;
    //定义成员方法
    public void run(){
        System.out.println("一辆价值"+money+"万元的"+color+barand+"正在跑!");
    }
}

(1)属性(成员变量)

        属性作用范围是整个类体

        属性定义格式:在类中,所有方法和代码块之外

        [修饰符] 属性类型 属性名 [= 默认值] ;

在定义成员变量时可以对其初始化(赋值),如果不对其初始化,Java使用默认的值对其初始化。(数值:0,0.0 char:\u0000, boolean:false, 所有引用类型:null)

(2)方法

方法则用于定义该类或该类的实例的行为特征和功能实现。方法是类和对象行为特征的抽象。

面向对象中,整个程序的基本单位是类,方法是从属于类的。

方法定义格式:[修饰符] 方法返回值类型 方法名(形参列表) {

                                方法体;

                          }

二.对象的创建和使用

必须使用new关键字创建对象

( new关键字的作用:
        1.为对象在堆内存开辟空间,成员变量会跟随对象进入到堆内存并附默认值
        2.调用构造器为对象初始化信息
        3.将地址返回给引用)
重点记住

使用对象(引用).成员变量来引用对象的成员变量

使用对象(引用).方法(参数列表) 来调用对象的方法

同一类的每个对象有不同的成员变量存储空间

同一类的每个对象共享该类的方法

//实列代码
public class Class004_CarTest {
    public static void main(String[] args) {
        //创建汽车对象 
        Class003_Car car1 = new Class003_Car();
        //通过引用使用对象的成员变量 引用存的是对象的地址
        car1.color = "黑色";
        car1.barand="保时捷";
        car1.money=1200000;
        //通过引用调用对象的方法
        car1.run();

    }
}
class Class003_Car {
    //定一个小汽车类
    //分析特性 颜色\价格\品牌
    //定义成员变量
    public int money;
    public String color;
    public String barand;
    //定义成员方法
    public void run(){
        System.out.println("一辆价值"+money+"万元的"+color+barand+"正在跑!");
    }
}

3.构造器(或者叫做构造方法,constructor)

        构造器也是很重要的,之所以单拉出来写它,因为它对于初学java的人来说很陌生,作为类中常见的成员之一重要性不言而喻。

        Java通过new关键字来调用构造器,从而返回该类的实例,它的作用是初始化对象信息,不是用来创建对象的。

        格式:    修饰符 类名(参数列表){}

:

  • 构造器可以实现重载,因为是特殊的方法
  • 没有显示定义构造器,编译器会默认提供空构造
  • 如果存在显示 定义构造器,不会提供任何构造器,包括空构造
  • 至少提供一个空构造...按需提供带参,不绝对,根据需求决定
//实例代码
public class Class01_Constructor {
    public static void main(String[] args) {
        //创建对象同时赋值
        Dog dog = new Dog("小花","金毛");
        dog.lookDoor();
        new Dog("安安","金毛").lookDoor();
        dog.show();
    }
}
class Dog{
    public String name;
    public String type;
    //定义没有参数的构造器
    public Dog(){
        
    }
    //定义一个参数的构造器
    public Dog(String dogName){
        //把实参接收到的数据赋值给了当前对象的成员变量name
        name = dogName;
    }
    //
    //定义两个参数的构造器
    public Dog(String name,String type){
        //this关键字用在构造器中的首行
        this.name = name;
        this.type = type;
    }
    public void lookDoor(){
        System.out.println(name+"正在看家!");
    }

}

4.this关键字

        普通方法中,this总是指向调用该方法的对象

        构造方法中,this总是指向正要初始化的对象

        让类中的一个方法,访问该类的另一个方法或属性。 访问属性更常用,用来区分同名的形参和属性。

        使用this关键字调用重载构造方法。避免相同的初始化代码,只能在构造方法中用,并且必须位于构造方法的第一句。(构造器的首行调用本类中的其他构造器---this(参数列表))

区分同名的成员与局部的问题
    默认就近原则
    如果出现同名问题,想要指代调用成员,通过this.成员-->因为this指代对象,通过对象调用成员
    如果没有同名问题,可以省略this.调用成员
    在构造器中使用this,默认指代当前new的对象,存储的是this的对象的地址
    在的成员方法中使用this,this在成员方法中默认指代当前调用成员方法的对象

注:
    1.多个构造器之间不能相互调用,否则无法停止调用
    2.在static修饰的内容中不能使用this        

5.static关键字

  在类中,用static声明的成员变量为静态成员变量不被static修饰的变量叫实例变量       

  • 它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化
  • 对于该类的所有对象来说,static成员变量只有一份。 被该类的所有对象共享!!
  • 可以使用”对象.类属性”来调用。不过,一般都是 用“类名.类属性” 。

        作用:成员修饰符:只能修饰成员位置的内容,不能修饰局部

        修饰变量:静态变量|类变量

        修饰方法:静态方法|类方法

用static声明的方法为静态方法,不被static修饰的方法叫做实例方法

        不需要对象,就可以调用(类名.方法名)

        也可以通过对象引用或类名(不需要实例化)访问静态成员。

  • 静态内容是独一份的,静态变量存在与静态区中,多个对象共享的资源
  • 成员内容跟随对象存在与对象的堆内存中,多个对象,就有多份成员
  • 初始加载顺序: 先静态后成员
  • 静态内容在类第一次加载完成之后就会进行初始化
  • 成员变量必须在执行到new对象的时候,才会存在对象的堆内存,在对象的堆内存中才会有成员变量
  • 在静态内容中,可以直接使用静态的内容,需要跟随对象使用成员内容
  • 在成员内容中,可以直接使用静态内容,可以直接使用成员内容
 
//实例代码
public class TestStatic {
    int a;
    static int width;//静态变量
    //静态方法
    public static void gg(){
        System.out.println("gg");
    }
    //实例方法
    public void tt(){
        System.out.println("tt");
    }
    //静态方法
    public static void main(String[] args){
        TestStatic hi = new TestStatic();
        TestStatic.width = 2;
        TestStatic.gg(); //gg();一般通过类名调用
        hi.gg(); //通过引用也可以访问static变量或static方法。不过,一般还是使用类名.static成员名来访问。
        gg();
    }
}

6.block块(了解)

{} 块 自成作用域
             分类                                                     执行时机
局部代码块|普通语句块 : {}定义在方法中                                  跟随方法的调用而执行
    1) 作用域看待
    2) 语义化
构造块 : {}定义在类中方法外                                            跟随new一起使用
    1) 成员内容的初始信息,比构造器中的代码跟早执行
    2) 对对象的某些内容进行初始
静态块 : static修饰{},定义在类中方法外                                 在类第一次加载完成之后执行
    1) 会为静态内容进行初始化
    2) 信息的配置,资源的加载
同步块 : 多线程学习

构造块中的代码会先于构造器中的代码之前执行
如果存在多个构造块,会从上到下一次执行
静态块在类第一次加载完成之后执行,并且仅会执行一次
如果存在多个静态块,会从上到下一次执行

程序执行顺序:静态块-->main-->创建对象 --> 构造块 --> 构造器

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值