生成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只能移除字符串开头和结尾的空格和制表符,字符串中间的无法移除 } }