JAVA面向对象:面向对象的相关基础知识

面向对象(OO.object-oriented):

定义:把现实中的事物抽象成由一系列属性和行为组成的结构体,每个结构体都有属于自己的功能,在软件开发的过程中,通过对不同功能的结构体进行组合,完成整个软件功能。且结构体可复用。简单说:面向对象是对现实世界的一种抽象模仿

相关语言:object-C(IOS开发)、java(单继承)、C++(多继承)、scala。另外C语言是面向过程的语言。

三大特征:封装、继承、多态。 ------------------------特征的解释:https://blog.csdn.net/mappp/article/details/51953896

面向对象的优点:稳定性、可扩展性、可复用性。

面向对象的原则:类的单一职能原则,单个类中的功能越多,交互耦合性越强,当业务需求改变时代码的可复用性就越差。


类与对象:

以类的方式组织代码,以对象的方式组织(封装)数据

对象:现实生活中具体的事物

类:是对对象的抽象表达 -----------------------类是java编程中最基本的单位,他可以构成我们想要表达的所有事物。

class 类名{

        数据类型 变量名  -------  对象的属性:叫小红的猫的名字、毛色、年龄等属性

        (public static)返回值类型 方法名{return;}  -------  对象的行为:小红抓老鼠、睡觉等行为

}

1.创建对象的方式:

        类名  对象名 = new 类名( );    ----------------------   对象实例化的同时调用构造方法,每new一次都会在堆内存中开辟空间

2.给对象赋值的方式:

        1)通过调用有参构造方法初始化赋值;

        2)调用无参构造方法初始化,再利用setter方法进行对象属性的赋值;

        3)对于非私有属性可以直接利用  对象名.属性名 = 要赋的变量值  的方式赋值。


匿名对象:

定义:没有名字的对象

Teacher  t  =  new  Teacher( );  --------------------  这是有名字的对象

t . teach();  ----------------------------------------------  使用对象调用方法


new  Teacher( );  --------------------------------------  这叫匿名对象

new  Teacher().teach(); -----------------------------  匿名对象调用方法

使用场景:1.方法只被调用一次的时候;2.作为参数传递的时候。

注意事项:调用多次不推荐使用匿名对象,因为创建多个对象,会不断开辟堆内存,浪费系统资源。

public class NoNameDemo{
    public static void main(String[] args){
        new Teacher().teach();   //适用于方法只调用一次的情况
        test(new Teacher());     //作为匿名对象传参
    }
    public void test(Teacher t){
        t.teach();
    }
}

面向对象的六大组分:

构造方法:访问权限  类名(数据类型 参数值 ){ 方法体;},在 对象实例化 的时候调用,很特殊的一类方法;

成员方法:访问权限 返回值类型 方法名(数据类型 参数值){方法体;return;},使用 对象名.方法名 进行调用;

静态方法:与成员方法相比多了 static关键字 修饰,使用 类名.方法名 进行调用;

成员变量:访问权限 数据类型 属性名;方法体外部定义的变量,私有属性使用 对象名.getter方法 访问,非私有属性使用

                  对象名.成员属性 进行调用。存放在堆内存中,有初始值,随着对象的创建而创建,随着对象的消失而消失

静态变量:使用 static关键字 修饰的成员变量,使用 类名.属性名 的方式调用。存在方法区的静态区,有初始值,随着类的加载而                      加载,随着类的消失而消失

局部变量:定义在 方法体内部或方法参数列表上 的变量,局部变量不赋初值不能使用。存放在栈内存中,没有初始值,随着方法的                    调用而创建,随着方法的结束而消失。

注意事项:

1.定义在方法体外部的变量有初始值,定义在方法体内部的局部变量无初始值,即局部变量不赋初值不能使用;

2.如果我们不在类中创建构造方法,那么系统会为我们自动生成无参数的构造方法。但是如果我们在类中自己写了构造方法,那么系统则不再为我们生成;

3.静态方法中不能调用非静态属性/方法。eg:main方法即为静态方法

public class ObjectDemo{
    //成员属性/变量
    String name;
    int age;
    //静态属性/变量
    static String country;

    //构造方法
    public ObjectDemo(){}

    //成员方法
    public void print1(){
        System.out.println("国籍是:中国");
    }

    //静态成员方法
    public static void print2(){
        System.out.println("国籍是:大中国");
    }

    //main方法的测试类
    public static void main(String[] args){
        //局部变量:不赋初值不能使用
        String str = "天生我才必有用,千万莫欺少年穷!";
        System.out.println(str);
        //因为main方法在本类中,因此可以直接 属性名 的方式调用静态变量
        System.out.println(country);   //引用数据类型的默认值是:null
        //静态方法中不能调用非静态属性,需要使用 对象名.属性名 的方式调用
        Object ob = new Object();        //实例化的同时调用构造方法
        System.out.println(ob.age);    //整型的默认值是0
        //静态方法中不能调用非静态方法,需要使用 对象名.方法名 的方式调用
        ob.print1();   //国籍是:中国
        //因为main方法在本类中,因此可以直接 方法名 的方式调用静态方法
        ob.print2();   //国籍是:大中国
    }
}

代码块:

静态代码块: static { }  -----------------随着类的加载而执行一次

构造代码块: { }  --------------------------每创建一个对象就会执行一次

局部代码块: 定义在方法中的 { } -----局部代码块执行完毕后会立马释放,很少使用。

三者的执行顺序:静态代码块 --> 构造代码块 --> 构造方法

public class StaticDemo {
	//静态代码块
	static {
		System.out.println("[静态代码块]靠你一起挖");
	}
	//构造代码块
	{
		System.out.println("[构造代码块]你好");
	}
    //构造方法
	public StaticDemo() {
		System.out.println("[无参构造方法]:我们不一样");
	} 
	public StaticDemo(int a) {
		System.out.println("[传参构造方法]:我们一起唱");
	} 
    //成员方法
	public void method() {
		System.out.println("[局部代码快]:月溅星河");
	}
	
	public static void main(String[] args) {
		StaticDemo c1 = new StaticDemo();
		StaticDemo c2 = new StaticDemo(5);
		c1.method();
	}
}
================================================================
[静态代码块]靠你一起挖
[构造代码块]你好
[无参构造方法]:我们不一样
[构造代码块]你好
[传参构造方法]:我们一起唱
[局部代码快]:月溅星河

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值