黑马程序员_java面向对象思想学习总结

                         -------<a href="http://www.itheima.com/"">android培训</a>、<a   href="http://www.itheima.com/" ">java培训</a>期待与您交流!----------

 

面向对象是java语言最根本的编程思想。对面向对象这种编程思想的学习是java语言学习最基本也是最核心的部分。

 

类:在java的世界里,将纷繁复杂世界里的存在最后都可以归结为类。一个个类组成了java的世界。而用java语言编写成序就是不断的在使用类,创建类,维护类。

类是由现实中用有共性的的实体对象进行抽像提取而来的。它拥有所有对象共有的属性与行为。即成员属性与成员方法。

抽象类:

当类中有抽象的方法,该类即为抽象类。必须被abstract关键字所修饰。

所谓抽象方法就是指该方法没有方法体。只声民了方法名,方法返回值类型。之所以出现抽象方法,因为类中的成员方法并不确定。

但抽象类也可以没有抽象方法。只要用abstract修饰类名即可。这样做通常是为了不让一类实例化。

接口:接口是可以说是一种特殊的类。它可以看做是行为的结合。实现某个接口,就相当于给某个类添加了一些功能。接口也经常被看做是种协议,让遵守这种协议的程序可以相互之间通信。

接口用interface定义。接口中的成员用固定形式定义,如下:

interface jk{
public static final int A=2;

public abstract int ha();

}

接口中的成员都是常量,用public static final修饰。方法用abstract修饰。接口中所有的方法都必须为抽象方法。

 

关键字 static

static修饰的方法 变量被称为静态成员变量 方法。静态成员被该类所有的对象所共享。在该类被创建对象时就会优先加载入内存中,用类名.的方式就可以调用。

final

final修饰的类为最终类,不可以被继续,修饰的变量为常量,只可以被赋值一次。修饰的方法不可以被覆盖。fianal修饰的引用数据类型的变量,只能指向一个对象,它的地址值不可以改变,但它所引用的对象是可以改变的。

使用final通常可以增加程序的执行效率,但前提是方法不能太庞大

 

java 中的访问权限:

public public 是最大的一种访问权限,在任何位置的程序都可以反问被他所修饰的成员。

   默认的反问权限,在java中没有为类或成员指出他的访问权限就会认为是默认的访问权限,可以被同一个包的成员所访问,不能被外面的包访问。

protect 可以被类的成员和其子类所反问。

private 私有的。只能被内部成员访问。prviate只可以修饰内部类。

 

面向对象的三大特征:

 

封装:将对象的属性与行为隐藏起来,仅对外提访问的接口。

封装的好处:将变化与用户隔离起来。

  提高代码的重用性。

  便于使用

            更加安全

所以我们在写代码中都应该遵守这个原则,将该类中仅供本类使用的成员都隐藏起来。只对外提供调用的接口。

继承:类与类存在着一种继承关系,如狗类就继承了动物类。当然继承只是类与类之间关系的一种。当一个类继承与另一个类他们的关系就是从属关系。这里要区别的是当一个类实现一个接口时,他们并不是从属关系。是like a而非is a

继承提高了代码的复用性。也为类的另外一种关系提供了可能,多态。

 

多态:1,多态的体现 

父类的引用指向了自己的子类对象。

父类的引用也可以接收自己的子类对象。 

      2,多态的前提 

必须是类与类之间有关系。要么继承,要么实现。 

通常还有一个前提:存在覆盖。 

多态的好处:大大提高了程序的扩展性。

多态的弊端:

只能用父类的引用反问父类的成员。

 

5,多态的应用 

abstract class Animal { 

        public abstractvoid eat(); 

class Cat extends Animal  {   

        public void eat(){   

                System.out.println("吃鱼");   

        }   

        public void catchMouse()  {   

                System.out.println("抓老鼠");   

        }   

}   

class Dog extends Animal  {   

        public void eat()  {   

                System.out.println("吃骨头");   

        }   

        public void kanJia()  {   

                System.out.println("看家");   

        }   

}   

class Pig extends Animal  {   

        public void eat()  {   

                System.out.println("饲料");   

        }   

        public void gongDi()  {   

                System.out.println("拱地");   

        }   

}   

   

class DuoTaiTest   {   

        public static void main(String[] args)   {   

                Animal a = new Cat(); 

                //类型提升。 向上转型。 父类类型指向子类对象  

                a.eat();  //吃鱼 

   

                //如果想要调用猫的特有方法时,如何操作?   

                //强制将父类的引用。转成子类类型。向下转型。   

                Cat c = (Cat)a;   

                c.catchMouse(); //抓老鼠 

   

                //不要出现这样的操作,就是将父类对象转成子类类型。   

                //我们能转换的是父类应用指向了自己的子类对象时。 

                //该应用可以被提升,也可以被强制转换。   

                //多态自始至终都是子类对象在做着变化。   

                //      Animal a = new Animal();   

                //      Cat c = (Cat)a;   

                   

面向对象的总结:

面向对象是java编程语言最根本的思想。我们应该用面向对象的思想看待现实中的问题,并将它转换为程序。不一定用java语言写出的程序就是面向对象的。想想以前自己将解决问题的代码全部一股脑的写到主函数里,真是可笑。时刻应该提醒自己在写带代码中,有封装了不必向外提供的数据了吗。这样写的代码以后需求改变时,它易与改变吗。它易于扩展吗。只有不断的用面向对象的思想在代码中实践才能写出真正的面向对象的java程序。

    -------<a href="http://www.itheima.com/"">android培训</a>、<a   href="http://www.itheima.com/" ">java培训</a>期待与您交流!----------

 

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 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、付费专栏及课程。

余额充值