idea四层级结构:
Editplus工具操作Java文件的基本单位:类文件。对应一级结构 idea操作Java文件的基本单位:项目(Project)。对应四级结构 第1层级架构:项目(project)
项目project包含: ?? ?.idea文件夹(项目的配置文件) ?? ? out文件夹(第2层级对应的所有字节码文件) ?? ? 模块文件夹(第2层级架构)
第2层级架构:模块(moudle)
模块moudle包含: ?? ? src文件夹(存储第3层级架构内容) ?? ? 模块名.iml 文件(模块配置文件) 模块上右键-Open Module settiongs(可以新建模块,移除模块,导入模块)
第3层级架构:包(Package) 包的含义:多级文件夹 包的好处:1.对程序文件管理分类。2.有效避免重名的文件?? ?
包中包含: ?? ?java程序(第4层架构)
包的注意:如果程序在包中,必须在第4层架构进行包的声明 包的声明: ?? ?1.包名就是公司域名倒序+功能 如:com.atguigu.idea ?? ?2.格式:package 包名; ?? ?3.命名规范: ?? ? ? ? 一个单词:单词全部小写(一般没有) ?? ? ? ? 多个单词:使用.进行间隔,一个单词就是一级文件夹
第4层级架构:.java文件(类文件) public class HelloWorld { ? ? public static void main(String[] args) { ? ? ? ? System.out.println("Helloworld");? ? ?} }
idea快捷模块
- psvm ?main()方法
- sout ?换行输出
- soutv ?变量输出
- 循环次数.fori ?正序循环
- 循环次数.forr ?倒序循环
idea常用快捷键:
- 基础键(代码提示continue) ? ? ? ALT+/
- 单行注释 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CTRL+/
- 多行注释?? ??? ??? ? ? ? ?CTRL+shift+/
- 格式化代码?? ??? ? ? ? ?CTRL+ALT+L
- 抽取变量(接受方法返回值) ? ? ? ?CTRL+ALT+V
- 万能键(代码报错修改提示)?? ? ? ? ?ALT+ENTER
import关键字: ????????模板类(javaBean)与测试类(包含main方法的类是测试类)在同一个包下可以直接使用,不用进行import导入。当想使用其他包下的java文件时,需要使用import关键字导包。
格式:import 包名.类名;(推荐) ? ? ? ? ? ?import 包名.*;//不推荐。因为import导入的类会导入到方法区的字节码文件区 import关键字必须声明在package关键字和类文件关键字之间(class,interface,enum)
api(应用程序接口) 含义:指代编程语言、框架、插件源码中的类和接口。
- java api:java语言源码的类和接口。
- java api文档:针对源码的类和接口提供的查询文档。
如果某个类或接口在java.lang根目录下,使用时不需导包,因为这是jvm的根路径。但是java.lang.reflect下就需要导包。
Scanner类 java.util
对基本类型和字符串类型的文本扫描器。 Scanner类有8个构造器,但是没有无参构造器。
//使用的构造器Scanner(InputStream source)?
Scanner sc=new Scanner(System.in);//System.in是键盘录入对象固定。
System.out.println("请输入一个整数");
int num=sc.nextInt();//程序会在这一块卡主
sc.close();//关闭资源。
面试题:为什么要调用sc.close()
java核心操作是内存操作,但是无法操作硬件.需要靠jvm建立通道忙,不关闭的话会建立越来越多连接。
注意点:
- 键盘录入的数据必须在调用方法(如:nextInt())的对应类型的取值范围内。
- Scanner只提供7种基本类型扫描的功能,没有提供char类型元素的扫描功能。
- 在进行基本类型数据键盘录入扫描时,无法扫描最后的回车换行(回车键)。
回车键科普
回车键是一个组合:回车+换行。 回车:将光标移动到当前行的行首 换行:将光标移动到下一行的对应位置
next()和nextLine()
使用 Scanner对象扫描键盘录入的字符串类型元素
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个字符串");
String str=sc.next();
sc.close();//关闭资源。
注意点: 1.使用next() 扫描的时候,遇到空白符号(空格,制表符)或者完整的字符结束,会停止扫描 nextLine() ,扫描整行(这行无论有什么)。
2.使用nextLine()之前不能使用扫描基本类型的方法或者next(),因为会在内存缓冲区遗留下 来的回车换行符,nextLine()会进行误读。
3.推荐使用next方法。
Math类 java.lang Math类是针对数学运算操作的工具类. Math的构造器私有化。里面所有的方法都是static修饰的。
---------------------------- Math.random() ? ? ? ? ? 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。[0.0,1.0)
//生成0-9的随机一个整数
int r=(int)(Math.random()*10+0);
//生成1-100的随机一个整数
int r=(int)(Math.random()*100+1);
//生成5-8的随机一个整数
int r=(int)(Math.random()*4+5);
生成随机数的技巧: (int)(Math.random()*a+b)
- a:这个范围总共含有多少个数
- b:这个范围起始值数字。
写一个猜1-100之间数字的小程序
会用到生成随机数Math.random()和接收键盘Scanner(System.in)输入。
public class Demo {
public static void main(String[] args) {
method();
}
private static void method() {
//随机生成一个1~100之间的整数
int num = (int)(Math.random() * 100 + 1);
//创建一个扫描器对象
Scanner sc = new Scanner(System.in);
//创建玩家猜数字的范围变量
int start = 1;
int end = 100;
while (true) {
//扫描键盘录入的整数
System.out.println("请键盘输入一个" + start + "~" + end + "范围内的整数:");
int value = sc.nextInt();
//进行健壮性判断
if (value < start || value > end) {
System.out.println("你猜数字有误,请重新输入数字......");
continue;
}
//进行数据的比较
if (value > num) {
System.out.println("很遗憾,你猜的数字太大啦,请重新选择数字......");
end = value - 1;
} else if (value < num) {
System.out.println("很遗憾,你猜的数字太小啦,请重新选择数字......");
start = value + 1;
} else {
System.out.println("恭喜你,猜中啦,中午可以加个鸡腿!!!");
break;
}
}
//关闭资源
sc.close();
}
}
Arrays类??java.util 针对数组操作的工具类。 构造器私有化,类里所有的方法都是静态方法。
-------------------------- toString(int[] a)? ? ? ? ? ? 返回指定数组内容的字符串表示形式。
binarySearch(int[] a, int key)? ? ? ? ? ? 使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。
copyOf(int[] original, int newLength)? ? ? ? ? ? 复制指定的数组,截取或用 0 填充(用默认值填充0或null),以使副本具有指定的长度
基本类型元素的数组,根据数值大小排序(boolean除外) sort(int[] a)? ? ? ? ? ? 对指定的 int 型数组按数字升序进行排序。
------------------------------------- sort(Object[] a)? ? ? ? ? ? 根据元素的自然顺序对指定对象数组按升序进行排序。 字符串类型元素数组排序,会根据字符串中字符内容的unicode码表中的数值大小升序排序 针对自定义类型(Student)对象元素数组排序,必须手动定义“比较规则”。 比较规则 ?? ?1.自然顺序比较器 Comparable ?? ?2.指定顺序比较器Comparator
sort(T[] a, Comparator<? super T> c)? ? ? ? ? ? 根据指定比较器产生的顺序对指定对象数组进行排序。
System类 ?java.lang 构造器私有化,类里所有的方法都是静态方法。
System 类有 3 个静态成员变量,分别是 PrintStream out、InputStream in 和 PrintStream err
public final static PrintStream out = null;//标准输出流
public final static InputStream in = null;//标准输入流
public final static PrintStream err = null;//标准的错误输出流
gc()//运行垃圾回收器
? ? ? ? 该方法的作用是请求系统进行垃圾回收,完成内存中的垃圾清除
获取当前毫秒值
//1970 年 1 月 1 日午夜之间的时间差,返回以毫秒为单位的当前时间
public static native long currentTimeMillis();
获取当前纳秒值
//返回最准确的可用系统计时器的当前值,以毫微秒为单位。纳秒
public static native long nanoTime();
BigInteger ? java.math 应用时机:超过long的取值范围,创建比Long范围还大的整数。
public static void main(String[] args) {
//构造器public BigInteger(String val)
BigInteger big1 =new BigInteger ("12121213121212131231313131");
BigInteger big2=new BigInteger ("1");
System.out.println(big1 .add(big2));//12121213121212131231313132
}
?BigDecimal ?java.math? 不可变的、任意精度的有符号十进制数。 应用机制:任意精度的浮点数
public static void main(String[] args) {
double d1=2.0;
double d2=1.1;
//Java中浮点数(double、float)的计算是非精确计算
System.out.println(d1-d2);//0.8999999999999999
System.out.println("=================");
BigDecimal b1 = new BigDecimal(2.0);
BigDecimal b2 = new BigDecimal(1.1);
System.out.println(b1.subtract(b2));//0.899999999999999911182158029987476766109466552734375
System.out.println("=================");
BigDecimal b3 = new BigDecimal("2.0");
BigDecimal b4 = new BigDecimal("1.1");
System.out.println(b3.subtract(b4));//0.9
}
运行结果:
|