2018/8/9 记录java笔记学习

JAVA学习笔记

2018/8/1

 

 

注释在企业开发中的应用

养成在项目开始写成思路步骤的习惯.

 

在敲完代码之后要检查是否有*号,要时刻用 ctrl+s保存下来

自定义函数 前面要有static修饰符 如

 

添加单行注释快捷键 ctrl+/

添加块语句注释快捷键 ctrl+shift+/

取消块语句注释快捷键 ctrl+shift+\

 

函数的重载

只要函数参数个数和参数类型不同即可

数组的定义

元素类型[] 数组名 = new 元素类型[]

 

---------------------------------------------------------错误提示---------------------------------

 

引用了空的函数值  其中arr1其内容已经被定义成null故不可调用

如打印这个的话前面的i是int类型的实体

 

  1.  
  2. 这两种定义数组的方式都是可以的

 

 

Arr[+i+]

因为括号里面必须要是常量 但是i和 j都是变量 ,所以需要添加加号把变量变成常量的性质 才能使用 可以这样理解吗

  1. 添加java.util包 其中
  2.  
  3.  
  4. 添加java.util类包之后 调用int index = Arrays.binarySearch(arr, 45) 其返回的是一个数组的索引

面向对象

  1.  
  2. New了一个新的对象

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

Static静态关键字 修饰成员 被static修饰的数据 可以被所有数据所共享

1修饰符 用于修饰成员

2 static修饰的成员被所有对象所共享

3 static 优先于对象存在 因为随着类的加载已经存在 但不一定有对象

4 static修饰的成员多了一种调用方式 类名.静态成员

 

静态使用的注意事项:

1 静态方法只能访问静态成员 (因为静态是随着类提前而存在的 此时类的非静态数据还未创建 故不可以)

2 静态方法中不能用this 和super关键字(因为此时并不一定会有对象存在)

3 主函数 是静态的

 

静态成员前省略的是类名 非静态成员前省略的是this

 

 

New一个类名.函数 可以直接来调用

 

静态代码块

随着类的加载而执行

 

  1. 另: 构造函数给对应的对象进行针对性的初始化      针对性
  2. 而构造代码块是给所有的对象进行初始化的          通用性
  3. 如例子 person类  所有孩子都会哭 故将Cry函数放在构造代码块中  不必在每一个函数中添加cry函数了
  4.  
  5. 其输出结果是

 

*-----------------------------------------------------------------------------------------------------------------------------*

总结:

1静态代码块   2构造代码块 3局部代码块

构造代码块:

  直接在类中定义且没有加static关键字的代码块称为{}构造代码;

  作用:给对象统一初始化数据

 

两种创建int数组的方法

 

 

创建一个函数 其中的方法要 get 或者show

在一个类或者函数中 要是没有访问到特有数据 就应该定义成static类型 静态的 不占用内存

加了静态修饰符之后 可以不用new一个新的类名 可以直接 类名.函数()

因为4   static修饰的成员多了一种调用方式 类名.静态成员

 

强制性的

  1. 面向对象中数组工具类中静态的使用:
  2. 类中的方法都设置成了静态类型的 所以该类不需要创建对象 ,为了保证其创建该对象
  3. 故可以将函数中的构造函数私有化  也可以节省内存

 

数组工具类中的文档注释

/**   内容   */

在开发中要养成这样写的习惯      控制台中cls 是清屏的意思 clear sreem

 

 

疑问: 关于javadoc的问题没有得到解答   2018/8/7 

 

利用cmd控制台程序来  javadoc –help来寻找帮助

Javadoc –d 目录/文件名称 –author –version ArrayTools.java

设计模式:

行之有效的一种解决方案 解决问题的一种思想

  1. 单例设计函数的唯一性
  2. 解决的问题:可以保证一个类在内存中的唯一性
  3. 在必须对于多个程序使用同一配置信息对象时 就需要保证对象的唯一性
  4. 如何保证对象的唯一性呢?
  5. 1 不允许其他程序用new来创建类对象
  6. 2在该类中创建一个本类实例
  7. 3 对外提供一个方法或者接口可以让其他程序来获取该对象

1私有化该类构造函数

2通过new在本类中创建一个对象实例、

3定义一个公有的方法 将创建的对象返回.

 

饿汉式

 

在主函数中 就不可以另外new函数了 直接利用接口来返回类对象

其结果都是20 因为t1得到的是testDemo借口返回的一个类对象 同样的t2也是得到的接口返回的类对象 在t1.setnum(10) t2.setnum(20)同样改变的是一个对象  故getNum的时候都会显示20   因为修改的是同一个对象

 

*--------------------------------------------------------*----------------------------------------------------------------*--

  1. 单例模式的第二种创建方法  //延迟加载模式 类加载进来的时候并没有对象
  2. 只有调用了接口函数的时候才会创建对象 懒汉式
  3.  

 

 

 

继承extends

  1.  
  2.  
  1.  
  1.  
  2.  
  3. 子类当中并不会具备父类中的私有内容

 

多继承和单集成

Java中支持单继承  但不支持C++中的多继承 但有一个改进的方式

 

覆盖的时候 子函数的权限等级一定要比父函数权限等级想等或者高 若是static的话都要有static

 

 

一个对象的实例化过程:

Person p = new person

  1. JVM会读取指定路径下的Person.class文件, 加载进内存中,并会加载person的父类
  2. 在堆内存中开辟空间, 分配地址。
  3. 在该对象空间中,对对象的属性进行默认初始化、
  4. 调用对应的构造函数进行初始化
  5. 在调用的构造函数中 ,第一行会先调用父类中的构造函数super()。
  6. 在父类构造函数初始化完毕后, 再对子类的属性进显示初始化。
  7. 在进行子类构造函数的特定初始化。
  8. 初始化完毕后,将地址值赋值给引用变量。

 

一个疑问解答

Javajava全局变量先执行还是构造先执行 

答:全局变量是在类加载时执行的!就是在编译时!而构造函数是在对象生成时加载的!所以是全局变量先执行!

全局变量是类加载的时候执行生成的 而构造函数是类在创建对象时加载的

 

Final关键字

继承的弊端 :打破了封装性。                   小技巧:ctrl+shift+x  / y  大小写切换

 

 

代码中的常量要大写表示 不是首字母大写

成员变量一旦被final了 一般都会加static静态

继承(抽象类)

其背景是 例如犬类中都会犬吠 但是犬科有又有特殊 若在class Dog中定义void show(“叫”);的话  其犬类的子类中若同样定义void show的话 show函数的内容又不一定是(“叫”)  可能是(“汪汪”)  但要是继承犬类的话 需要用到该show行为但是其内容又不一样  故将show函数定义成抽象函数  如 abstract void show();

这样设置的话类名前就要加abstract修饰符   是抽象类

 

抽象类是大的类中 没法具体到具体的行为动作 但是有这个动作

 

 

构造函数:为对象成员变量赋初始值 设置类的全局变量是在构造函数之外的

 

其中programmer类中的构造函数 不能用this 因为

 

在其父类employee 属性变量是private 不能用this来调用的    父类中定义完子类中直接拿来用就可以了 子类中重新写是覆盖 子类中想使用父类的构造时用super();来调用父类的构造函数

 

接口

 

 

类与类之间是继承的关系

类与接口之间是实现的关系(接口里的函数都是抽象的 并没有进行实现)

接口不能实例化 只能由实现了接口的子类并覆盖了接口中所有的方法后,该子类才可以实例化,否则 这个子类 就是一个抽象类

 

  1. 关于多继承
  2.  
  3. 例如如下图所示
  4. 例如
  5. 其中test类实现了A Z的接口 并在其类内部中建立了一个show同名函数 会覆盖了A和Z中的show函数  真正实现了多继承性
  6. 为什么java中没有多继承? 因为多继承的话 父类中会有方法体 当子类继承的时候
  7. 并不知道会调用哪个方法函数 所以java将其改进 用实现的办法 在父类或者接口中只定义了函数 而在实现的子类中自己定义函数方法体  这样的话就知道调用的是哪个方法体了  因为自己定义的当然清楚
  8.  
  9. 为什么接口可以实现多继承呢?
  10. 继承出错就出在方法体上 而接口 并没有方法体
  11. 在子函数implements接口的 覆盖接口函数的时候 前面要加public
  12.  
  13.  
  14.  

 

主函数

其特殊之处在1 格式是固定的 2 被JVM java虚拟机所识别和调用

 

 

 

 

接口和抽象类的异同点

 

 

 

 

其中继承了犬类的功能  但导盲是额外的功能 需要用接口来实现其功能

 

多态的成员变量 成员函数 静态函数

只有成员函数有例外 编译时看左边 运行时看右边 cat c =new animal 调用c.show的话 是引用的catshow 因为内存中引用的cat地址 cat地址中调用animal的地址

 

 

多态

 

问题:

 

在此类创建中 若new一个dog  new一个pig的话 那么主函数中的method方法要不停地添加  故:

 

多态的好处: 前期定义的代码 后期的内容仍然可以使用

多态的弊端: 前期定义的内容 不能调用后期子类的特有内容

如: d.play();   动物中并没有这个动作  要想调用猫类特有的动作 就得new猫这个类

 

 

 

 

 

 

 

毕姥爷类讲课是管理 毕老师讲课中是java

在毕老师类型提升到毕姥爷的同时 调用毕老师的讲课函数 但其实毕老师类中也同样有讲课函数  覆盖掉了毕姥爷中的讲课函数  只是覆盖了   在调用x.钓鱼的时候 会正确 因为x本身就是毕姥爷类型

类型判断

 

 

 

 

内部类

访问另一个类的私有变量时 需要添加另外的方法 但直接添加在内部类的话可以直接使用其私有变量

 

内部类可以访问外部类的成员 变量

但是外部类无法访问内部类 要设置一个方法 建立一个内部类的函数 来调用

 

 

显示的话num输出5  this.num输出4   outher.this.num就是outher类中的成员变量了

 

这就是内部类可以直接访问外部类的成员

因为内部类持有了外部类的引用  外部类.this.成员名

 

 

 

内部匿名类

 

匿名内部类就是匿名子类对象   忽略了子类对象的名字

    public void method1()

    {

       //inner i = new inner();

       new DEMO11()

       {

           void show()

           {

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

           }

       }.show();

       //i.show();

 

其中java10个中的最后一个视频 要掌握看好

 

 

 

猜你喜欢

转载自blog.csdn.net/dianyanxia/article/details/81534210