尚硅谷JavaSE基础课堂笔记 | 您所在的位置:网站首页 › 随机文字api › 尚硅谷JavaSE基础课堂笔记 |
常见的DOS命令
md cmd ——>创建一个叫cmd的文件夹cd cmd ——>进入cmd文件夹cd… ——>回退一层文件夹cd\ ——>直接回退到某盘rd ——>删除文件夹(有内容无法删除)dir ——>查看文件目录del ——>删除文件cls ——>清屏exit ——>退出命令提示符窗口
开发步骤
java程序开发三步骤:编写、编译、运行 将java代码编写到扩展名为.java的源文件中通过javac.exe命令对该java文件进行编译,生成一个或多个字节码文件通过java.exe命令对生成的class文件进行运行 对编写进行说明 class为关键字,表示类,后跟类名。main()方法格式固定的。 public static void main(String[] args)若想变化,只能变化String[] args结构。可以写成:1.String args[] 2.String[] (args全称为arguments)严格区分大小写System.out.println();可加引号输出字符串,也可不加引号输出纯数字或数字加和。 若编译报错问题可能在: 查看文件名、路径是否书写错误。查看代码是否存在语法问题。 编译后,会生成1个或多个字节码文件。每一个字节码对应一个java类,并且字节码文件名与类名相同。 对运行的说明: 区分大小写 2.可能存在运行时异常(第九章讲) 一个源文件可以声明多个类,但最多只能有一个类使用public进行声明。且要求声明为public的类的类名与源文件名相同。 注释(不参与编译) 单行注释 //多行注释(不能嵌套使用) /* */ 作用: 解释说明代码,调试程序。文档注释: 文档注释的内容可以被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档。 /** */ API文档API是java提供的基本编程接口也就是基础类库。 API文档:为API的目录。 Java的优点 跨平台性,write once,run anywhere。 java程序在虚拟机JVM中运行面向对象性健壮性安全性高简单性 java可以看作c++的简化版高性能 java现在可以通过jit即时编译技术提高运行效率 缺点 语法过于复杂严谨一般适用于大型网站开发,整个架构比较重,对初创公司开发个维护人员的成本较高并非适用于所有领域 JVM功能说明JVM java虚拟机,是虚拟计算机,java程序的运行环境。JVM具有指令集并使用不同的存储区域,负责执行指令,管理数据、内存、寄存器。 功能 实现java程序的跨平台性自动内存分配(内存分配、内存回收) java在运行过程中,涉及到运算的数据的分配、存储等都由JVM来完成。GC的自动回收,很大程度上减少了因为没有释放空间而导致的内存泄漏。 但是!java程序还会出现内存溢出和内存泄漏的问题! 真题内存中的一个存储区域,该区域的数据可以同一类型范围内不断变化 三要素:数据类型、变量名、储存的值 格式:数据类型 变量名 = 变量值 基本数据类型(8种): 整型:byte\short\int\long(使用long时要加l/L后缀) 浮点型:float\double(使用float时要加f/F后缀) 字符型:char 布尔型:boolean 引用数据类型: 类(class)、数组(array)、接口(interface)、枚举(enum)、注解(annotation)、记录(record) char gender;\\变量的声明 gender='男';\\变量的赋值/初始化 在同一作用域内不能声明两个同名变量。 注意二进制浮点型不能精确表示0.1、0.01这样的10的负次幂,若需要精确数字计算或保留指定位数的精度,需使用BigDecimal类。 布尔类型:boolean只有两个取值:true、false; boolean bo1 = true; boolean bo2 = false; 尝试用在流程控制语句中:比如条件判断、循环结构等。 tips:我们不谈boolean类型占用的空间大小。但是,真正在内存中分配,使用4个字节。 运算规则 ①自动类型提升当容量小的变量与容量大的变量做运算时,结果自动转化为容量大的变量。 byte、short、char——>int——>long——>float——>double 特别的:byte、short、char做运算结果为int。 说明:此时的容量大或小,并非指占用内存空间的大小,而是指表示数据的范围大小。 例子long i2 = 123l; long i3 = 123; (自动类型提升:int——>long)编译成功 float f2 = 12.3f; float f3 = 12.3; (不满足自动类型提升的规则:double——>float 所以报错)编译失败 规定:整型常量规定为int类型,浮点型常量规定为double类型。 ②强制类型转换如果需要将容量大的变量的类型转换为容量小的变量类型,需要使用强制类型转换。 强制类型转换需要使用强转符:()在括号内指明要转换的数据类型。 例子int i4 = 12; float f1 = i4; System.out.println(f1); float f2 = (float)i4;(可以通过,但是没有必要) 精度损失的例子double d2 = 12.9; int i4 = (int)d2; System.out.println(i4); 直接截断小数部分。 int i5 = 128; byte b1 = (byte)i5; System.out.println(b1); 输出-128 String类,属于引用数据类型。可以使用双引号赋值,可包含0 1 多个字符。 String与基本数据类型间的运算 基本数据类型包括布尔在内的八种String与基本数据类型变量间只能做连接运算,使用+表示。运算结果为String类型。++或–运算不会改变变量数据类型 例题int i = 1; int j = i++ + ++i * i++; System.out.println("j = " + j); i=1参与运算 i=2 , ++i使i变成3 , 3*3+1=10, 此时i=4,j=10. 2. int i = 2; int j = i++; System.out.println(j); 输出为2,先将i赋值给j,i再运算。 算术运算符+= -= *= /= %= 操作不会改变变量的数据类型。 例题如何使变量的值增加2 ① int n1 = 10; n1 = n1 + 2; ② int n2 =10; n2 +=2; 建议使用第二种方法,不会改变数据类型,不需要强转。 比较运算符== !=可适用于引用数据类型 运算结果为布尔类型 逻辑运算符逻辑与 & 短路与 && 逻辑或 | 短路或 | 异或 ^ 左右布尔值不同输出ture 相同输出false 区分& 和 &&相同点:表达的都是且的关系 不同点: 若符号左边为true,则它们都会执行等号右边的操作若符号左边为false,则&会执行右边的操作,&&不会。开发中推荐使用&& 区分| 和 ||相同点:表达的都是或的关系 不同点: 若符号左边为false,则它们都会执行等号右边的操作若符号左边为true,则|会执行右边的操作,||不会。开发中推荐使用||面试题:高效的方式计算*8 解:2 向右移动时,左面直接补0, */ 步骤1:导包import java.util.Scanner 步骤2:提供(或创建)一个Scanner类的实例 步骤3:调用Scanner类中的方法,获取指定类型的变量 步骤4:关闭资源,调用Scanner类的close() 案例:小明注册某交友网站,要求录入个人相关信息,如下: 请输入你的网名,你的年龄,你的体重,你是否单身,你的性别等情况。 import java.util.Scanner; class ScannerTest{ public static void main(String[] args){ //步骤2:提供(或创建)一个Scanner类的实例 Scanner scan = new Scanner(System.in); System.out.println(“请输入你的网名:”); String name = scan.next(); System.out.println("name = " + name); System.out.println(“请输入你的年龄:”); int age = scan.nextInt(); System.out.println(“请输入你的体重:”); double weight = scan.nextDouble(); System.out.println(“你是否单身(单身 true ; 不单身 false)”); boolean isSingle = scan.nextBoolean(); System.out.println(“请输入你的性别:”); char gender = scan.next().chatAt(0); System.out.println(“网名”+name+“年龄”+age…); System.out.println(“注册成功,欢迎”); scan.close(); } } [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kag3RsWA-1684318489720)(img_7.png)] 如何获取随机数 可以使用java提供的API:Math类的random()random()调用之后,会返回一个[0.0,1.0]范围内的double型的随机数需求1:获取一个[0,100]范围的随机整数?需求2:获取一个[a,b]范围的随机数 (int)(Math.random() * (b-a+1)) + aclass RandomTest { public static void main(String[] args){ double d1 = Math.random(); System.out.println("d1 = "+ d1); int num1 = (int)(Math.random() * 101); //[0.0,1.0]–>[0.0,101.0)–>[0,100] System.out.println("num1 = " + num1); } } 快捷键ctrl+shift+/ 为多行注释快捷键 out+enter 为导包快捷键->选中未导包的函数,使用快捷键则导包。若有多个包含有同一个类,则该方法与自动导包配置需要手动指定。 获取系统当时的时间操作为:System.currentTimeMillis();为long型数据,单位是毫秒。 质数输出方法1:遍历2到10000自然数,判断某数是否可以除尽比他小的某数。 1优化:加break;针对非质数有效果。->加上Math.sqrt()的效率更高: 数组(array) 概念:多个相同类型数据的组合 数组名下标或索引(从0开始)元素数组的长度 特点 元素紧密排列,是有序的属于引用类型数据变量,元素既可以是基本数据类型,也可以引用数据类型。 一维数组的内存分析new代表新开辟内存空间。 java中内存是如何划分的java虚拟机架构图 例如:int []arr = new int[]{1,2,3}; 虚拟机栈:用于存放方法中声明的变量。如:arr 堆:用于存放数组的实体既数组中的所有元素。比如:1,2,3 栈stack特点:先进的后出去,后进的先出去。 堆heap 例1: 例2: 例1: 例2: 类:具有相同特征的事物的抽象描述,是抽象的。 对象:是实际存在的该类事物的每个个体,是具体的,也称为实例。 类的成员概述面向对象的重点是类的设计->类的成员设计 属性:该类事物的状态信息,对应成员变量也对应field行为:要做什么样的操作,对应成员方法也对应method 面向对象完成具体功能的三步流程 创建类,并设计类的内部成员(属性,方法)创建类的对象,比如,Phone p1 = new Phone();通过对象调用内部属性和方法,完成相关功能。虚拟机栈(栈):用于存放方法中声明的变量。 堆:new出来的结构。比如:数组实体,对象实体,包括对象中的属性。 方法区:存放类的模板,比如:Phone类的模板 每一个方法对应一个栈帧。方法内声明的变量也应该存放在栈帧里 创建类的一个对象![]() 相同点: 不同点: ![]() 方法声明的格式: 权限修饰符【其他修饰符】返回值类型 方法名(形参列表)【throws 异常类型】{//方法头 //方法体 } 中括号中内容非必须 返回值类型:当调用此方法时,是否需要返回一个结果。分类: 无返回值类型,使用void表示即可,比如:System.out.println(x)的println(x)方法,Arrays的sort(). 有具体的返回值类型,需要指明返回的数据类型。可以是基本数据类型,也可以是引用数据类型。 需要在方法内配合使用return+返回值类型的变量或常量。 形参列表:形参,是局部变量。且可以说明多个。 格式:(形参类型1 形参1,…) 分类:无形参列表、有形参列表 无形参列表:不能省略一对()。如Math.random(), 有形参列表:根据需要的不确定的变量的个数,确定形参的类型和个数。 形参:声明时,一对括号内声明的一个或多个形式参数。 实参:方法在被调用时,实际传递给形参的变量或常量。 对象调用方法的过程:eat()等方法用完就弹出栈,不会保留。 注意:方法的重载与形参的名、权限修饰符、返回值类型都没关系。 如何判断两个方法相同?方法名相同且形参列表也相同。(形参列表相同指的是参数个数和类型都相同,与形参名无关) 对象数组定义:数组的元素可以是基本数据类型,也可以是引用数据类型,当元素是引用类型中的类的时候,我们称为对象数组。 内存解析格式:(参数类型…参数名) 说明: ①可变个数形参的方法在调用的时候,针对于可变的形参赋的实参的个数可以为0,1,或多个 ②可变个数形参的方法与同一个类中,同名的多个方法之间可以构成重载 ③特例:可变个数形参的方法与同一个类中方法名相同,且与可变个数形参的类型相同的数组参数不构成重载 ④可变个数的形参必须在形参列表最后 方法的值传递机制 基本数据变量的局部变量传递的是数据值引用类型数据的局部变量数组和类类似,传递的是地址值。![]() ![]() ![]() ![]() ![]() ![]() 在方法里自己调用自己叫做递归 分为直接递归和间接递归 说明:递归方法包含隐式循环,会重复执行某段代码但无须循环控制,一定要向已知方向递归否则会成为无穷递归,最终发生栈内存溢出。 注意: ①递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多,在使用递归时要慎重。 ②在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存,考虑使用循环迭代。 |
CopyRight 2018-2019 实验室设备网 版权所有 |