黑马程序员_面向对象(概述、封装)

------- android培训java培训、期待与您交流! ----------

 

----------------------面向对象概述 封装  

 

面向对象概述

是一种编程思想,相对于面向过程,将功能封装进对象,强调具备了功能的对象。

面向对象有三大特征:封装,继承,多态

特点:找对象,建立对象,使用对象,维护对象的关系

封装就是对功能的封装

:对现实生活中事物的描述(共性内容,具体抽象)描述就是class定义的类

对象:就是这类事物,实实在在的个体对应java在堆内存中new出来的实体

如:对汽车:类就是生产汽车的图纸,汽车就是堆内存中的具体对象

对象的属性对应类中的变量,行为对应类中的函数

代码:

public classCarDemo

{

    publicstaticvoid main(String[] args)

    {

        Carc = newCar();//实例化,相当于生产了一辆汽车

        c.color ="blue";//将车子的颜色改为蓝色,这个是局部变量

        c.run();//调用了汽车的run()方法

    }

}

class Car

{

    String color= "red";

    intnum = 4;         //这两个是汽车的属性,是成员变量,实例化之后存在于堆内存中

    void run()           //汽车的行为

    {

        System.out.println(color+"..."+num);

    }

}

成员变量

成员变量作用于整个类。定义在堆内存中,由对象的存在而存在

局部变量

局部变量作用于函数或者语句。存在于栈内存中,

匿名对象

对对象的简写格式,如:

Car c = new Car();     

c.run();

简写为:new Car().run()//调用一次时可用匿名对象完成

好处:简写代码。不足:不能完成多次调用,一次调用完就垃圾了

匿名对象还可以作为实际参数进行传递

封装:

指隐藏对象的属性和实现细节,仅提供公共访问方式

好处:变化隔离,便于使用,重用性,安全性

原则:将不需要对外提供的内容都隐藏起来,属性隐藏,提供公共方法对其访问

private:权限修饰符的一种,用于修饰类中的成员(成员变量、成员函数)私有只在本类中有限,对成员属性进行私有化之后,必须提供访问该属性的访问方式(通常为两个,setget)并进行控制,如逻辑判断等,提高了代码的健壮性

private修饰构造函数还可以避免用户创建对象

构造函数

特点:函数与类名一致,不用定义返回值类型,不用写return语句,对象一建立就会调用与之对应的构造函数,当一个类中没有定义构造函数时,系统会给该类加入一个空参数的构造函数,自定义后替换默认,new一个对象时就执行且只一次

作用:给对象进行初始化

什么时候定义构造函数:分析某一事物时,该事物存在或具备一些行为或特征时,将这些行为或特征定义在构造函数中

构造代码块

作用:给对象进行初始化,对象一建立就运行而且优先于构造函数执行。

特点:给所有对象初始化,构造函数只给对应的对象初始化。不同对象的共性的初始化方式定义在构造代码块中

this关键字

this代表它所在函数所属对象的引用(本类对象)

应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象(本类功能使用了本类对象都用this表示)

例(应用):

    publicboolean compare(Person p)

    {

        return this.age == p.age;//这里,谁调用compare()方法,this就代表谁

    }

在构造函数中的应用(this语句):

Person(String name)

    {

        this.name = name;

    }

    Person(String name,intage)

    {

        this(name);//这里this相当于   对象(name)

        this.age = age;

    }

this语句只能定义在构造函数的第一行

      因为初始化要先执行

总结:

public classPersonDemo

{

    publicstaticvoid main(String[] args)

    {

        Personp1 = newPerson("zhangsan",21);//new一个人叫张三,21

        Personp2 = newPerson("lisi",21);

        boolean b = p1.compare(p2);//p1p2进行年龄的比较

        System.out.println(b);

    }

}

class Person

{

    privateinta ge;

    private Stringname;  //对人的属性agename进行私有

    Person(Stringname)//构造函数1:只有姓名

    {

        this.name = name;//this代表本类对象

    }

    Person(Stringname,intage)//构造函数2、既有姓名又有年龄

    {

        this(name);//这里this相当于   对象(name)

        this.age = age;

    }

    {

        System.out.println("Cry.......");//构造代码块:给多有对象初始化

    }

    publicvoid setAge(int age)//age进行操作。(name未列出)

    {

        this.age = age;

    }

    publicint getAge()//获取age的值(name未列出)

    {

        returnage;

    }

    publicboolean compare(Person p)//提供一个比较年龄是否相等的方法

    {

        returnthis.age == p.age;//这里,谁调用compare()方法,this就代表谁

    }

}

static(静态)关键字

用于修饰成员(共性的,被共享)(成员变量和成员函数),成员被修饰后随着类的加载而加载消失而消失,优先于对象存在,被所有类共享,可以直接被类名调用(类名.静态成员)。

static修饰的成员变量和成员函数在内存的方法区(共享区或数据区)

static修饰的成员变量叫类变量,它随类的加载而存在于方法区中,生命周期最长

注意:静态方法只能访问静态成员。非静态方法及可以访问静态也可以访问非静态。静态方法中不可以定义thissuper关键字,因为静态优先于对象存在

main(主函数)

public staticvoid main(String[] args){}

public:代表该函数访问权限最大

static:该函数随类的加载而加载

void:主函数没有返回值

main:不是关键字,但是能够被JVM识别

String[] argsmain函数的参数是一个字符串数组,其长度为零

dos环境下:运行一个class文件时,如java MainDemohaha  可以往该程序的主函数String[]args中传递元素(haha

帮助文档的制作

将说明用文档注释,@author作者  @version 版本

@param 表示该方法接收的参数类型  @return表示该方法的返回值类型

javadoc –d目录 –author–version类名如:

javac –d d:\myhelp –author –version ArrayTool.java

静态代码块

格式:  

static

    {

        执行语句

    }

随着类的加载而执行且只执行一次,用于给类初始化

对象的初始化过程:

1、         类的加载

2、         静态代码块的执行(方法区)

3、         在堆内存中开辟空间,分配内存地址

4、         默认初始化

5、         对属性进行显示初始化

6、         构造代码块初始化执行

7、         对应的构造函数初始化执行

8、         将内存地址赋值给栈内存中的变量

单例设计模式

设计模式是纯思想

1、饿汉式

public classArrayTool

{

    publicstaticvoid main(String[] args)

    {

        Single ss = Single.getInstance();//获取该对象

    }

}

class Single

{

    private Single(){}//限制对象的创建

    privatestatic Singles = new Single();//自己创建一个私有静态的对象

    publicstatic Single getInstance()//对外提供一个获取该对象的方法

    {

        returns;

    }

}

2、懒汉式

classSingle

{

    privatestatic Single s =null;//对象初始化

    private Single(){}//限制对象的创建

    publicstatic Single getInstance()//对外提供一个获取该对象的方法

    {

        if(s ==null)//先判断

            s= newSingle();//再创建

        return s;

    }

}

两种方法的区别:建立对象的时间不同

懒汉式在多线程时存在安全隐患,可加锁:public static synchronizedSingle getInstance()但是这种方式效率就低了

最终解决方案:

public static synchronized Single getInstance()

{

      if(s==null)

          synchronized(Single.class)

          {

      If(s==null)

          s=new Single();

}

}

即:双重判断

 

------- android培训java培训、期待与您交流! ----------

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值