Java Object、Scanner、String 、生成jar包

生成jar包

1、如何生成jar包:

  在eclipse中,选中要导出内容,右键export---->Java---->Jar File

  在弹出的框中,选择要生成的文件路径,点击finish

2、第三方Jar包:

  Jdk开发商是第一方、程序员作为用户是第二方,开源社区、组织或者其他公司都可以认为是第三方

  一旦将第三方的jar包导入到我们的工程中来,就可以使用第三方开发好的所有功能

3、导入第三方jar包:

  1、在工程下新建一个目录(专门用于存放第三方jar),命名为lib

  2、将下载好的第三方jar包,拷贝到lib目录中

  3、将导入的jar包添加到Build Path中(鼠标右键,选择build path----> add to build path)

  4、看到奶瓶状的标记出现,就说明该jar包中的所有类型可以直接使用了

4、使用第三方jar包,查看原码:

  1、使用鼠标右键,选择Open declaration

  2、使用快捷键F3

  3、使用键盘ctrl + 鼠标左键

5、关联源代码:

  Attach Source ---->external File或者Folder---->找到原码所在的目录即可

Object

1、Object类是所类型的顶层父类,所有类型的类直接或者间接的父类,所有的类型中都含有Object类中所有的方法。
  class Animal{}
  class Dog extends Animal{}
2、随意定义一个类型,不手动显定义其父类,那么这个类的父类是Object类
3、Object类的构造方法 Object()
  1.可以自己创建对象
  2.让子类访问
  3.Object类在执行构造方法时,不去访问自己的父类,因为没父类了。

4、Object类的常用方法

  1.getClass()方法
    返回当前 对象的运行时类
    运行时类:真正创建对象所使用的那个子类类型。
    返回值:Class类型的对象。
  2.hashCode() 方法
    1.根据对象的情况,生成的一个整数,就是哈希码值,生成数字的方法 就是hashCode()
    2.注意事项
      同一个对象多次调用hashCode方法,返回相同的整数。
  3.String toString()
    返回该对象的字符串表示。
    1.Object类型中,这个方法的实现,全类名+@+哈希码值的十六进制表示
      getClass().getName()+"@"+Integer.toHexString(hashCode())
    2.打印对象,默认会调用toString()
    3.重写的原则:返回该对象中的所有的成员变量的值(对象的属性)
  4.boolean equals(Object obj)
    指示其他某个对象是否与此对象“相等”。
    Object类中的equals方法比较是两个对象的地址
    如果比较其它内容,需要重写equals方法。
  5.== equals方法的区别
    1.两种都是用于比较数据是否相等。
    2.不同点:
      1.比较内容不同:
        ==可以比较任意数据类型,既可以比较基本数据类型,也可以比较引用数据类型。
        equals()只能比较引用数据类型。
      2.比较规则不同:
        ==在比较基本数据类型的时候,比较的是数据的值,比较引用数据类型时,比较的是地址值
        equals方法在重写之前,比较是两个对象的地址,在重写之后,比较的是自己定的规则。

Scanner

1、Scanner就是一个扫描器, 可以扫描指定设备的基本数据和字符串
2、构造方法
  Scanner(File source):扫描指定的文件
  Scanner(String path):扫描指定的路径
  Scanner(InputStream source):扫描指定的输入流
  System.in属于InputStream类的对象,默认关联键盘
3、录入基本数据类型
  1. nextByte():获取一个byte数据
    nextShort()
    nextInt()
    nextLong()
    nextFloat()
    nextDouble()
    nextBoolean()
  2.注意事项
    1.nextChar()没有这个方法
    2.键盘录入的是数据,不是java代码,所以float类型的常量不需要加f.
    3.一次想录入多个数据,可以使用空格进行分隔
4、录入字符串
  1.next(): 空格来分隔每个字符串
  2.nextLine():换行来分隔字符串
5、Scanner注意事项:
  以后尽量不要交叉使用空格和换行标志分隔。

6、小问题  

  问题:当你调用完以空格作为分隔符的方法之后,再调用一个以换行符为分隔符的方法时,这个方法不会等待你继续录入,而是直接结束程序,如果打印返回的内容,就是一个空字符串。

  原因:

  1、键盘录入123之后,其实你录入的是123+一个换行符,当使用nextInt方法之后,将123这三个字符解析成一个int类型的数字,获取到内存的变量中,在Scanner对象中,留下了一个换行符,下次再调用nextLine,这个方法是以换行符作为分隔符,在分隔符前面只剩下了一个空串,将空串返回,所以不需要等待用户继续录入了。

  2、键盘录入123之后,其实你录入的是123+换行符,当使用nextInt方法之后,将123这个数字解析成一个int类型的数字,获取到内存的变量中,在Scanner对象中,还剩一个换行符,再次调用nextInt方法时,发现只剩一个空串了,无法解析成一个int类型的数据,只能等待用户继续录入。所以不会出现上述问题。

  3、键盘录入abc之后,其实你录入的是abc+换行符,当你使用nextLine方法之后,将换行符前面的所有数据都解析成一个字符串,因此换行符前面就没有任何需要解析的数据了,如果再次调用nextLine,只需要到换行符之后寻找,只能继续等待用户录入了。(其实就是nextLine方法一碰到换行符就跳过了)

  解决方式:

  1、连续两次调用nextLine,第一次会将空串略过,第二次就会等待用户录入

  2、创建两个Scanner对象,新的Scanner对象中没有上次录入的数据,是干净的,所以不会影响下次的录入。

  3、所有的录入都以字符串的形式录入到内存中,然后再进行数据类型之间的转换

String

1、String就是一个字符串类型,属于java.lang包,不需要导包
2、所有的字符串常量("helloworld","abc"),都属于字符串对象
3、字符串的字面属于常量,存储在方法区的常量池中。
4、String类型是一个常量,在创建之后就无法更改。平常见到的改变是重新赋值新地址
5、因为没有提供set方法
6、String类型的构造方法
  1.String():创建一个空字符串
  2.String(String original):创建参数字符串的一个副本(参数字符串在常量池中,构造方法创建的字符串在堆内存中)。
  3.String(byte[] bytes) :将一个字节数组转一个字符串
    将我们不认识的字节数组,转成了我们认识的字符串,过程叫解码。
    查询的是当前平台默认的编码表。
  4.String(byte[] bytes, int offset, int length)
  5.String(char[] value):
  6.String(char[] value, int offset, int count)
7、String中常用的方法
  1.判断功能
    boolean equals(Object anObject) :比较字符串本身
    boolean equalsIgnoreCase(String anotherString)
    boolean contains(CharSequence s)
    boolean startsWith(String prefix) 
    boolean endsWith(String suffix)
    boolean isEmpty()
  2.判断功能练习
    模拟用户登录:
    正确的用户名是admin,密码是123
    键盘录入用户名和密码,一共三次机会,如果录入错误,前两次提示还有几次机会,
    最后一次提示"账号已被锁定"
    录入正确,提示“登录成功”

import java.util.Scanner;

/*
 * 模拟用户登录:
    正确用户名是admin,密码是123
    键盘录入用户名和密码,一共有三次机会,如果录入错误,前两次提示还有几次机会
    最后一次提示“登录机会已经用完”
    录入正确,提示“登录成功”
 */
public class Demo02 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int count = 3;
        boolean flag = true;
        while(flag){
            if(count>0) {
                System.out.println("请输入用户名:");
                String userName = sc.nextLine();
                if(userName.equals("admin")) {
                    System.out.println("请输入密码:");
                    String code = sc.nextLine();
                    if(code.equals("hao123.com")) {
                        System.out.println("登录成功");
                        break;
                    }else {
                        count--;
                        System.out.println("密码错误,还有"+count+"次机会,请重新输入");
                    }
                }else {
                    count--;
                    System.out.println("用户名错误,还有"+count+"次机会,请重新输入");
                }
            }else {
                System.out.println("三次机会以用完,是否重新输入?1:继续,0:退出");
                int a = sc.nextInt();
                if(a==1) {
                    count = 3;
                }else{
                    break;
                }
            }
        }
        sc.close();
    }
}
练习

  3.String类型的获取功能
    int length()
    char charAt(int index)
    String substring(int beginIndex, int endIndex)
    int indexOf(String str) "aabbacc"
  4.String类型的转换功能
    byte[] getBytes(String charsetName)
    char[] toCharArray()
    String toUpperCase()
    String toLowerCase()
    String concat(String str)
    static String valueOf()
  5."i lOVe jAva"-->"I Love Java"
    splite(" ")这里括号里是填正则表达式 根据给定正则表达式的匹配拆分此字符串。
  6.String类型的其它的方法
    String replace(char oldChar, char newChar)

    String replaceAll() 这里括号里是填正则表达式 替换此字符串所有匹配给定的正则表达式的子字符串。

    String replaceFirst()  替换此字符串匹配给定的正则表达式的第一个子字符串。
    String trim() " ab c "-->"abc" //去掉字符串左右两边的空格、制表符

public class Demo01 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String s = " ab c ";
        String s1 = s.trim();
        System.out.println(s1);//trim只能移除字符串开头和结尾的空格和制表符,字符串中间的无法移除
    }

}
trim

 

原文地址:https://www.cnblogs.com/xfdhh/p/11182179.html