首页 > 代码库 > java自学之路-day10

java自学之路-day10

JAVA10

Eclipse快捷键补充

l  选中类Ctrl T 继承树

l  Ctrl 或者f3 查看源码 多态会跳转到调用父类中

l  Java中lang包中的所有类 不需要导包 直接用  例如 System String

l  Ecplise 中的Jre System Library是默认的eclipse依赖jre的类库 在该位置可以查找到平常使用的String 类 Random类 Math类

 

l  Jdk 包括 jre和开发工具,jre包括jvm 和运行时所需要的核心类库

l  运行 helloworld 运行了本类的同时还运行了System类等核心类库

 

 

rt装了平时用到的核心类的.class文件

java中的文档注释和制作

  1. 为了让使用者能够明白程序的意思
  2. 文档注释
  3. /** 回车键 类的文档注释

 

作者

类的功能

@标记作者 版本

  1. 方法的文档注释

/** 回车

 

功能

参数

返回值

  1. 注释在源码中 class文件没有注释 需要使用工具把注释变为说明书
  2. Javadoc.exe
  3. Eclipse中的用法

Export—java—Javadoc—选中要需要打说明书的包—finsh

 

找到index 点击

 

注释必须写在自动生成的下边或者上面

生成jar包

  1. 怎么用一个类或多个类
  2. 打成 jar包
  3. Jar.exe
  4. Export—java—JAR File –选中需要打的包—finish

 

  1. 里面只有.class文件
  2. 之前都是直接在path中改 不好操作 容易改错
  3. 新建系统变量 JAVA_HOME
  4. 路径为 jdk的目录
  5. Path中添加%JAVA_HOME%\bin;

JAVA_HOME配置

%%表示引用

导入jar包

l  命令行导入

l  设置classpath 告知jvm去哪个路径下找可以运行的class

l  set classpath

 

l  eclipse怎么导入jar包

new—floder—lib—拷贝jar包到lib中——右键buildpath—add to buildpath

 

 

和使用命令行设置一样

类中的权限修饰符

l  public 公共访问 修饰类 方法成员变量

l  protected 受保护访问子类中访问 方法 成员变量

l  默认 什么也不写 默认访问 类 方法 成员变量

l  Private 私有访问 方法 成员变量

l  Static 静态修饰符 方法成员变量

l  Final 最终修饰符 类 方法 成员变量 局部变量

l  Abstract 抽象修饰符 类 方法

l  Abstract 和private不能同时用

l  Abstract 和static 不能同时使用

l  Abstract 和final不能同时使用

l  修饰类 最常见是public

l  修饰成员变量 最常见的是private

l  构造方法 最常见的是 public

l  成员方法 最常见得是 public static abstract

局部变量和成员变量设计解析

l  如果是属于事物的属性就用成员变量  计算长方形的面积和周长

l  如果是属于事物功能方法的属性就用局部变量  计算两个数的乘积和求和

l  如果没有使用非静态变量就定义静态方法

类作为方法的参数和返回值

l  作为方法的参数

  1. 写在方法的参数列表中
  2. 利用类的引用变量用来调用方法
  3. 一个对象有两个变量来指向 一般对象最为参数
  4. 匿名对象作为参数

l  作为方法的返回值

  1. 一般对象作为参数
  2. 匿名对象作为参数

抽象类型作为方法的参数和返回值

l  作为方法的参数

  1. 抽象类作为参数 没有对象
  2. 实际传递的是子类的对象实例
  3. 调用的的方法是子类实现的方法
  4. 可以传递多种子类对象 多态调用的扩展性

l  作为方法的返回值

  1. 抽象类作为返回值 void改为是抽象类
  2. 没有对象 只能返回子类的对象
  3. 接收的类型应该为 抽象类类型
  4. 但缺点是 不知道返回的是哪一个子类对象
  5. 可以在方法中加参数 再加入if条件句等用来选择返回哪一个子类对象

接口作为方法的参数和返回值

l  作为方法的参数

  1. 传递的还是实现类的对象实例
  2. 调用的也是实现类的实现方法
  3. 多态传递子类对象也可以
  4. 调用接口中的常量

a)         可以直接用接口名调用

l  作为方法的返回值

  1. 返回的也是实现类的对象 多态的调用
  2. 接收的也还是接口的类型
  3. 调用的实现类的方法
  4. API中很多接口对象都是用get来获得的,而不是用new出来的
    1. 对于调用者来讲简化了代码
    2. 日历类

抽象类作为方法的返回值案例

a)         是一个抽象类

b)         导包 util

c)         已知子类 重新抽象方法

d)         非抽象方法 直接继承使用

e)         静态get方法 获得Calendar子类对象

f)         

g)        

h)         不需要知道子类是什么

 

五星酒店案例

  1. 介绍

 

a)         酒店中多名员工 一名经理(特有奖金) 一名厨师 两名服务员

b)         VIP服务

c)         调用员工功能

d)         调用VIP服务

l  分析

  1. 员工类 共性 父类
  2. 厨师 服务员 经理(特有奖金) 各有的特性 子类
  3. VIP服务 额外方法 接口
  4. 酒店  使用者  测试类

总结

l  修饰符

定义的时候用的

类 public

   内部类可以当做一个成员来讲

   这里类常指外部类

成员 private

方法 public

l  自定义数据类型作为返回值和参数

抽象类

接口

API

引入

  1. SUN公司做好的
  2. 一般不需要知道怎么实现的
  3. 知道怎么使用就行
  4. src.zip 源码文件
  5. 可以查看源码
  6. API文档
  7. 查找方式

软件包 String java.lang

显示按钮 索引  

Object类 常用类

 

  1. 所有类都是他的子类
  2. 构造方法 Object();
  3. 接口是否继承object

接口没有构造器没有访问object类的构造器

equals()方法

 

a)         Object类中的方法之一

b)         用来进行比较是否与此对象相等

c)         方法形式参数是object类型 因此所有的类型都可以作为实参

d)         所有类都继承Object类 所以 任何类的对象都可以来调用equals方法来使用

e)         非静态方法

f)          返回值是布尔值

 

g)         比较内存图

                                       i.              this 是方法调用者

                                     ii.              obj 表示被比较的对象

                                    iii.              Object 类是顶层类 其引用变量可以指向任意类的实例对象的内存地址

                                    iv.               == 比较两个对象内存的地址

                                     v.              结果为false返回给方法调用

                                    vi.              没有意义 因为两个对象内存地址肯定不一样 没有可比性

l  重写equals

  1. 比较对象成员变量
  2. this 改为 this.age
  3. obj不能直接调用传过来对象的特有属性

因为Object obj=另一个对象 是多态上转型,父类不能调用子类特有属性

  1. 所以需要改为 向下转型为另一个对象的类型才可以调用
  2. 弊端:

只能传递相应的对象 如果传递其他类型比如数组就会抛出异常或出错

  1. 所以需要进行判断是否为对应的对象类型 instanceof
  2. 另外还需要进行非空判断 返回false 和同一个对象判断 返回true

 

ToString方法

l  返回值是String类型

l  输出语句中输出的是对象时默认调用对象的toString方法

l  System.out.println(对象p); 和System.out.println(对象p.toString);相同 输出对象的内存地址

l  重写方法toString

  1. 返回对象的成员变量
  2. 打印Random类的对象是地址 打印Scanner类的的对象不是地址
  3. 因为Scanner重写了ToString方法
  4. 概念和特性
    1. 特点

String类

一切皆对象

字符串是一个事物也是一个对象

类是描述事物的 String类就是描述字符串的

 

  1. 有很多方法来操作字符串
  2. 所有“ ”都是一个String类对象
  3. String str =”ddd”

String 类名

Str 引用类型的变量

“ ”是对象实例

不用new

打印str 也没有打印出地址 因为也是String类对toString重写了

  1. String 常量
    1. 字符串是一个常量 不可更改
    2. 字符串对象不变 而不是引用类型变量不变 引用类型变量可以重复赋值
    3. 内存图

字符串是一个对象

运行的时候在堆内存

本质是一个字符的数组

“abcd”相当于char value[]={a,,b,c,d}

String 类中是 private final char value [];

所以是常量

  1. 内存图
    1. Main方法进栈
    2. 定义Str 常量 abcd
    3. 退内存中有常量池
    4. 常量池中有很多常量

字符型常量有52个

需要一个itacat时从常量池中拿出来用

本质是一个字符数组 str指向字符数组空间地址 由于重写了toString方法 就输出了itcast

如果又新建了一个str变量=abcde 那么就会重新开辟一个char数组内存,重新指向一个新数组内存地址, 输出就会改变

 

  1. 创建方式
    1. String str1=new String(“abc”);
    2. String str2=new String(“abc”);
    3. str1==str2
    4. str1.equal(str2)
    5. 内存图
      1. String str1=new String(“abc”);

新建了两个对象

一个是 new String();

一个是 字符数组 value[]

New String 保存的是 value[]的内存地址

所以输出的是abc

  1. String str2=new String(“abc”);

检测是否有abc数组 检测到有 则直接指向value数组的内存地址

所以输出 str1==str2 因为地址相同所以 输出 true

而 .equals 因为父类String重写了equals方法 用来比较字符串中的每个字符是否相同,而不是比较地址

 

 

 

 

 

  1. String类构造方法
    1. String(byte[ ] bytes)

a)         通过使用平台的默认字符集指定byte数组,构造一个新的String

b)         中文操作系统 默认编码表是 GBK

c)         将定义的byte数组中的元素在编码表中进行查询 然后构造出来一个全新的字符串

d)         如果是负数 查询GBK 两个字节一个汉字

  1. String(byte[] bytes,int offset,int length)

a)         前面是一个字节数组 后面的截取的范围 一个int表示起始索引 一个表示 截取个数

  1. String(char[] value){};

a)         将字符数组转为字符串 字符数组的参数 不查询编码表

  1. String(char[] value,int offset.int count)

a)         前面是一个字符数组 后面的截取的范围 一个int表示起始索引 一个表示 截取个数

 

  1. String(””)

 

 

 

  1. String类的查找功能
    1. length(); 返回int 字符串的长度
    2. 获取部分字符串

a)         substring(int beginIndex,int endindex)

b)         开始索引 和 结束索引 包含头部不包含尾部

c)         返回一个新的字符串 需要重新用变量接收

d)         前面索引必须大于后面索引

e)         substring(int beginIndex); 包含头部 后面的全要

  1. startwith(String prefix);

测试字符串是否以指定的前缀字符串开始

返回一个布尔值

  1. endwith(String prefix);

测试字符串是否是一个字符串的后缀

返回一个布尔值

  1. contains(String xxx)

判断一个字符串中,是否包含另一个字符串

  1. indexof(char ch)

查找一个字符,在另一个字符中第一次出现的索引

返回 -1表示没有包含

  1. getBytes()

将字符串转成字节数组

功能和构造方法相反

返回一个字节数组

数组里面是对应的查询编码表

  1. chartAt(int index)

返回索引上的字符

  1. toCharArray()

将字符串转成字符数组

功能和构造方法相反

返回一个字符数组

不查询编码表

  1. equals()

是否相同

equalsIgnorecase(String s)

是否相同忽略大小写

  1. 练习

 

 

 

 

StringBuffer类

1.概念

  1. 字符串缓冲区 提高字符串效率
  2. 内部是可变数组 类的父类内部定义了个字节数组char数组 没有final
  3. 默认容量是16个字符
  4. String不可变 一个“”就代表一个数组 相加之后又是一个新数组 消耗资源
  5. StringBuffer 可以扩容
  6. 默认容量 由构造器调用父类构造方法传递16创建默认数组

2.方法

  1. append(类型 变量名)

a)         可以添加任何类型变量

b)         返回值是StringBuffer

         StringBuffer buffer=new StringBuffer();

buffer.append(6);

         System.out.println(buffer);

c)         Append 方法源码是返回this;

谁调用append就返回谁

   buffer.append(6).append("2522");

方法调用链

  1. delete(int start,int end)

a)         删除指定索引区间的字符 包头不包尾

b)         返回StringBuffer

c)         删除全部 0 到length

  1. Insert(int index,任意类型)

添加任意类型数据到指定位置

a)         可以多一位不可以多两位

  1. replace(int start,int end,String str)

替换范围内的字符串 包头不包尾

  1. reverse();

将缓冲区内的字符翻转

  1. toString

继承Object类重写的toString方法

将可变的缓冲区对象转换为不可变String对象

 

StringBuilder

l  提供一个和StringBuffer兼容的API

l  不同

StringBuilder线程不安全 运行快

StringBuffer线程安全 运行慢

所以在使用单线程时使用StringBuilder比较好

练习

改变数组输出格式为【2,1,2】

 

java自学之路-day10