API(应用程序编程接口)

*  public final Class getClass();//返回Object的运行类(java的反射机制学)

*  Class类中有一个类

*public String getName();//以String类型返回它所表示的实体(获取当前正在运行的类         的全路径)

*  Integer类中有一个方法

public  static String toHexString(int i);//将一个int类型的数据转换成一个人十六进制的    字符串表示形式

*  Object类:

类层次的根类。所有的对象(包括数组,都实现这个类的方法)

*  public int hashCode();

返回该对象的哈希码值

hashCode------->通过哈希算法(哈希表:hashtable)------>地址值(不是实际意义           上的地址)

*  toString();

返回对象的一个字符串表示(返回以文本方式表式表示的一个次对象的字符串)

建议所有的子类都重些这个方法:

toString();源码:

public String toString(){

return getClass().getName()+"@"+Integer.toHexString(hashCode());

}//隐藏this

toString()<==>对象名。                  getClass().getName()+"@"+Integer.toHexString(hashCode())

如果直接对象名称想要显示成员变量的值,必须重些Object类中的toString方               法//Alt+Shift+b----->s(自动生成)

package object;public class Student extends Object {private String name;private int age ;public Student() {super();}public Student(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}}//测试类
public class ObjectDemo {public static void main(String[]args){Student st=new Student();System.out.println(st.hashCode());//每次运行结果不相同System.out.println("hello".hashCode());//字符串的hashCode值每次运行结果不变System.out.println(st.getClass());//返回Object的运行类System.out.println(st.getClass().getName());//获取全路径名称Student st1=new Student("弋痕夕",24);//System.out.println(st1.toString());如果不重写toString()//这个方法就相当于st.getClass().getName()+"@"+Integer.toHexString(hashCode())//结果是object.Student@31731334System.out.println(st1.toString());//重写过后运行结果如下}
}

//运行结果

*  x.equals(y)//返回值为boolean类型

“==”和equals()方法的区别?

“==”默认比较地址

equals()方法底层是通过“==”来实现的;默认比较的是两个对象的地址值,如             重写equals方法则比较的是两个对象的内容是否相同

源码:

public boolean equals(Object obj){

return(this==obj);

}

package object;public class Student1 {private String name;private int age ;public Student1() {super();}public Student1(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//Shift+Alt+s——>h快捷键重写equals()方法@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Student1 other = (Student1) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}
}public class EqualsDemo {public static void main(String[] args){//创建两个对象Student1 st=new Student1("天净沙",45);Student1 st1=new Student1("天净沙",45);System.out.println(st==st1);//“==”默认比较的是两个对象的地址:falseStudent1 st2=st;//将st指向的地址值赋给st2;所以st与st2指向同一个地址System.out.println(st==st2);//System.out.println(st.equals(st1));底层是由"=="实现,不重写则等价于“==”:falseSystem.out.println(st.equals(st1));//重写后默认this.变量:表示当下传入的值所以返回true}}

//运行结果

*  protected void finalize()throws Throwable:当垃圾回收器确定不存在对该对象的           更多引用时,由对象的垃圾回收器调用此方法,但是,什么时候调用垃圾回收器

不确定;

*  protected Object clone()创建并返回此对象的一个副本

throws CloneNotSupportedException

注意事项:

Object 类的 clone 方法执行特定的复制操作。首先,如果此对象的类不能实现接             口 Cloneable,则会抛出 CloneNotSupportedException。

* Scanner类:

创建文本扫描器(键盘录入)

Scanner sc=new Scanner(System.in);(创建录入对象)

*   开发步骤:

创建录入对象

录入数据

输出

*   nextInt();录入int类型

nextLine();录入一个字符串类型

有时候录入时会出现异常:java.util.InputMismatchException.(输入和想得到的                                                   数据类型不匹配)

*   public static final InputStream in;(标准输入流)

*   public static final OutputStream out;(标准输出流)

*   hasNeatXX();在录入之前,加上判断功能,判断是否有下一个可以录入的XX类型的数                    据

*Scanner类的注意事项:

先录入int;类型数据在录入String类型数据,第二次录入没有接收到,直接输出了结果

这是因为再输入一次后回车才能输入第二次,由于第二次输入的是字符串,回车会导致第

二次输入失败。

解决方案:

在第二次输入前重新创建键盘录入对象

package scanner;import java.util.Scanner;public class ScannerDemo {public static void main(String[] args){Scanner sc=new Scanner(System.in);System.out.println("请输入字符串:");String str=sc.nextLine();//先录入String后录入int类型,没有问题System.out.println("请输入×××数:");int num=sc.nextInt();System.out.println(str+"---"+num);System.out.println("----------------");System.out.println("请输入×××数:");int num1=sc.nextInt();System.out.println("请输入第二个×××数:");int num2=sc.nextInt();System.out.println(num1+"---"+num2);System.out.println("----------------");System.out.println("请输入×××数:");int num3=sc.nextInt();//先录入int后录入String,由于回车才能接收数据的原因直接输出int类型的值System.out.println("请输入字符串:");String str1=sc.nextLine();System.out.println(num3+"---"+str1);System.out.println("----------------");System.out.println("请输入字符串:");String str2=sc.nextLine();//正常输入System.out.println("请输入第二个字符串:");String str3=sc.nextLine();//正常输入System.out.println(str2+"---"+str3);System.out.println("----------------");//上述问题的解决方法System.out.println("请输入×××数:");int num4=sc.nextInt();System.out.println("请输入字符串:");Scanner sc1=new Scanner(System.in);String str4=sc1.nextLine();System.out.println(num4+"---"+str4);System.out.println("----------------");     }}

*String类型:

字符串类:所有的字符串字面值(如“abc”“[”……)都作为此类的实例实现

字符串为常量,创建后其值不可以改变。

package string;public class StringDemo {public static void main(String[] args) {//定义一个字符串常量(在字符串常量池中如果有这个字符串则给出它的地址//如果没有,就重新定义一个字符串,并给出它的地址)String s = "hello" ;change(s) ;//输出字符串变量System.out.println("s:"+s);s += "world" ;//s=“helloword”;并没有改变常量池中的“hello”,是在常量池中重新开辟//了空间存新的放字符串“helloword”,并将他的地址赋给s;System.out.println("s:"+s);//输出s为helloword}public static void change(String s) {//String类型作为形式参数和基本数据类型的效果一样,无论对形参进行什//么样的操作都不会对实参产生影响s += "javase" ;}
}

*String类常用的构造方法:

public String():表示一个空字符序列。

public String(byte[] bytes,Charset ch):默认字符集(编码格式):GBK,如果是GBK                                      格式,可以不写第二个参数

public String(byte[] bytes,int index,int length):将部分字节数组构造成一个                                             字符串

public String(char[] value):将字符数组构造成一个字符串

public String(char[] value,int index,int length):将部分的字符数组构造成一                                             个字符串

public String(String original):通过字符串常量构造一个字符串对象

获取字符串的长度功能: public int length()

*面试题:

*数组中有没有length()有length属性,(字符串缓冲区:StringBuffer)中没有             length(),字符串中有length()

*String s="hello";和String s=new String("hello");两个有什么区别?分别创建了几           个对象?

第一个创建了一个对象

第二个创建了两个对象(堆内存中有new String(),然后字符串常量池中会有一个字符           串常量"hello")

* String类的转换功能(重点)

*byte[] getBytes():将字符串转换字节数组

* 编码和解码:一定要保证编码格式一致

编码:

把能看懂的东西转换成一个看不懂的东西:

String----->byte[]:public byte[] getBytes(String  charsetName)

解码:

把当前的byte[]转成能看懂的东西(String):

byte[]----->String:public String(byte[] bytes,CharsetName ch)

package string;import java.io.UnsupportedEncodingException;
import java.util.Arrays;public class StringDemo3 {public static void main(String[] args) throws UnsupportedEncodingException{//创建String对象空参String str=new String();//获得Str的长度并输出System.out.println("str.length():"+str.length());System.out.println("str:"+str);System.out.println("----------------");//创建对象并初始化String str1=new String("hello");System.out.println("str1.length():"+str1.length());System.out.println("str1:"+str1);//定义数组byte[] bt={65,66,67,68,69,70,};String str2=new String(bt);System.out.println("str2:"+str2);System.out.println("str2.length()"+str2.length());System.out.println("-------------------");String str3="明天有雨";byte[] bt2=str3.getBytes("utf-8");byte[] bt3=str3.getBytes();//编码System.out.println(bt2);//输出一个地址值,原因是没有重toString方法//Arrays.toString();将变量转化成字符串形式;源代码重写了toString();输出bt2的内容System.out.println(Arrays.toString(bt2));System.out.println(Arrays.toString(bt3));System.out.println("-------------------");//解码String str4= new String(bt2) ;//编码格式不匹配;输出乱码System.out.println("str4:"+str4);String str5=new String(bt2,"utf-8");//使用“utf-8”格式编码后面解码也必须用“utf-8”格式System.out.println("str5:"+str5);String str6=new String(bt3);//如果使用“GBK”格式编码,则不需要写明第二个参数,它是默认的System.out.println("str6:"+str6);            }
}

*char[] toCharArray():将字符串转换成 字符数组 (开发中经常使用)

*static String valueOf(char[] chs):将字符数组转换成字符串

*static String valueOf(int i):将一个int类型的数据转换成字符串

注意:

String类中的valueOf()可以将任何数据类型转换成字符串

*String toLowerCase():将字符串全部转成小写

*String toUpperCase():将字符串全部转换成大写

*String concat(String str):字符串拼接方法

package string;public class StringDemo4 {public static void main(String[] args){//定义一个字符串String str="Helloword";System.out.println(str);//将字符串转换成 字符数组char []ch=str.toCharArray();//遍历数组for(int i=0;i<ch.length;i++){System.out.print(ch[i]+" ");}System.out.println("");System.out.println("---------------");//将字符数字转换成字符串String str1=String.valueOf(ch);System.out.println(str1+" ");//将int类型数据转换成字符串String str2=String.valueOf(50);System.out.println(str2);//将字符串全部转换成大写System.out.println("toUpperCase:"+str.toUpperCase());//将字符串全部转换成小写System.out.println("toLowerCase:"+str.toLowerCase());//字符串的拼接String str3="---javase";System.out.println(str.concat(str3));}}

方法递归:方法调用本身的一种现象

三个条件:

1)需要定义个方法

2)方法必须有出口条件

3)必须有某一种规律

package homework;public class FactorialDemo {public static void main(String[] args){int num=10;System.out.println("10!="+getSum(num));}  public static int getSum(int num){// 1!=1   2!=1*2  3!=2!*3   4!=3!*4  5!=4!*5//基数从一开始int factorial=1;//求阶乘的和for(int i=1;i<=num;i++){   //求阶乘 factorial*=i;}return factorial;} }

转载于:https://blog.51cto.com/13355940/1978464

Java学习lesson 10相关推荐

  1. JAVA学习脚印10:解惑java 中UTF-16与char

    JAVA学习脚印10:解惑java 中UTF-16与char java中的char.utf-16编码.代码点.代码单元等概念,做一个了解还是有必要的. 1.基本概念 1) Java的字符类型和字符串类 ...

  2. Java学习lesson 02

    常量 什么是常量 * 在程序执行的过程中其值不可以发生改变   Java中常量的分类 * 字面值常量 * 字符串常量                           * 整数常量         ...

  3. JAVA学习 11.10

    Java第一天 1.1 Java发展史 1995年,SUN虽然推出了Java . 詹姆斯 高瑟林[java之父]带领自己的团队研发了java编程语言. 后来有一个公司就整了一个开发软件 Eclipse ...

  4. Java学习_Day 10(学习内容:尚硅谷集合JAVA零基础P523-P533)

    P523 集合-使用Iterator遍历Collection package com.collection;import org.junit.Test;import java.util.ArrayLi ...

  5. Java学习lesson 14

    *数据结构 *栈结构(先进后出,后进先出) 特点:进栈的方式叫压栈 出栈的方式叫弹栈 *队列(先进先出) *数组(查询快,增删慢) *链表结构 有很多链子将多个节点连接起来 每一个节点(数据):数据域 ...

  6. Java学习笔记10

    当程序创建对象.数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存区, 当我们创建的对象不再被引用时,所在的内存就变成了垃圾,最后等待垃圾回收机制进行回收,Java的垃圾 ...

  7. java学习(10):数据类型

    对于java的数据类型,既熟悉又陌生,于是整理了这篇文档. 最近的面试让我开始注意细节,细节真的很重要. 首先,我们知道在JAVA中一共有八种基本数据类型,他们分别是 byte.short.int.l ...

  8. Java学习笔记10(面向对象三:接口)

    接口: 暂时可以理解为是一种特殊的抽象类 接口是功能的集合,可以看作是一种数据类型,是比抽象类更抽象的"类" 接口只描述所应该具备的方法,并没有具体实现,具体实现由接口的实现类(相 ...

  9. Java学习lesson 06

    匿名对象 * 节省代码,并且很多情况下是针对某个方法只需要调用一次的情况下. * 匿名对象可以调用方法,也可以给成员变量赋值. 同时也可以作为方法的参数进行传递. public class AnonD ...

最新文章

  1. 交换机组网典型故障案例及处理思路
  2. flink中datastream和dataset各自print()的异同
  3. c语言实现图像拼接程序,opencv2实现10张图像上下左右拼接融合分享!
  4. win7怎么把计算机放到桌面6,win7系统如何设置更改桌面图标?
  5. 【计算机网络笔记】计算机网络定义分类
  6. mysql 日志mixed模式_[MySQL binlog]彻底解析Mixed日志格式的binlog
  7. win10使用navicat管理数据库
  8. NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver
  9. 21天通关python 磁力_Python 实现 BT 种子转化为磁力链接 [实战]
  10. sigmoid函数及其图像绘制
  11. 使用LibreOffice将office文档转pdf(java实现)
  12. 二维码学习笔记(一) | 二维码概述
  13. ハーディー / 哈迪
  14. ITK-图像主轴分析
  15. python写cdr插件_(如何(用Python)写一个(Lisp)解释器(下))
  16. 数据管理的热点话题:数据资产、数据价值、数据驱动、数据管理和数字化转型
  17. C++坑人游戏[1.0版本](完)
  18. msvcp120.dll一键修复工具,msvcp120.dll文件修复之后还会丢失吗?
  19. docker查看mysql日志_Docker 容器日志分析
  20. java available用法_Java.io.BufferedInputStream.available()方法实例

热门文章

  1. Android从本地服务器获取Mp3实现边下边播(JavaEE+Tomcat+SQLServer)
  2. 如何利用MATLAB调用手机摄像头(手把手教程)
  3. Node.js中exports和moudle.exports
  4. 1字符集 iso latin_ISO Latin-1字符集
  5. 利用NTLDR进入RING0的方法及MGF病毒技术分析
  6. 计算机编程课是学什么的,编程是什么课程
  7. win10系统开机启动连不上网
  8. Win10如何设置快速锁屏?电脑怎么设置离开锁屏?
  9. python爬虫-京东登录
  10. ASO关键词优化技巧:如何充分利用热搜榜与相关热点?