尚硅谷JavaSE基础课堂笔记 您所在的位置:网站首页 随机文字api 尚硅谷JavaSE基础课堂笔记

尚硅谷JavaSE基础课堂笔记

2023-06-07 00:31| 来源: 网络整理| 查看: 265

常见的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程序还会出现内存溢出和内存泄漏的问题! 真题

在这里插入图片描述

关键字(50个) 定义:被java语言赋予了特殊含义,有专门用途的字符串或单词特点:全部为小写字母。 其中有两个关键字为保留字为const和goto 其中ture false null非关键字但是为字面量,避免使用这五个作为关键字。 标识符(identifier) java中变量,方法,类等要素命名时使用的字符序列。(凡是自己可以命名的)规则: 由26英文字母,0-9,_或$组成。(数字不可开头)不可以使用关键字或保留字。严格区分大小写,长度无限制。不能包含空格。 规范: 包名:多单词组成时所有字母小写。类名、接口名:多单词组成时,所有单词首字母大写。变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词以后每个单词首字母大写。常量名:所有字母大写,多单词用下划线连接。 变量

内存中的一个存储区域,该区域的数据可以同一类型范围内不断变化

三要素:数据类型、变量名、储存的值

格式:数据类型 变量名 = 变量值

基本数据类型(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, */ 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

条件运算符只有一个 就是三元运算符,凡用条件运算符都可以用if-else代替,反之不可。

在这里插入图片描述

Scanner 键盘输入功能的实现

步骤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)) + a

class 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: 在这里插入图片描述

面向对象三条主线 java类及java类的成员:(重点)属性、方法、构造器;(属性)代码块、内部类面向对象的三大特征:封装、继承、多态、(抽象)其他关键字的使用:this、super、package、import、static、final、interface、abstract等 面向对象是软件开发的一类风格,开发范式。除了面向对象,还有面向过程,指令式编程和函数式编程。在所有的编程范式中,我们接触最多的还是面向过程和面向对象两种。 面向过程的程序设计思想,简称POP 关注焦点是过程:是操作数据的步骤,如果某个过程的实现代码重复出现,那么就可以吧这个过程抽取为一个函数。这样可以大大简化冗余代码,便于维护。典型语言:c语言代码结构:以函数为组织单位是一种“执行者思维”,适合解决简单问题,扩展能力差,后期维护难度大。 面向对象的程序设计思想,简称OOP 关注焦点为类,将属性特征,行为特征抽象出来,用类表示典型的语言:java,c#,c++,python,ruby和php等代码结构:以类为组织单位,每种事物具有自己的属性和行为功能是一种“设计者思维”适合解决复杂问题,代码扩展性强,可维护性高 上述两种非对立,他们是相辅相成的,面向对象离不开面向过程。 java的基本元素:类和对象

类:具有相同特征的事物的抽象描述,是抽象的。 对象:是实际存在的该类事物的每个个体,是具体的,也称为实例。

类的成员概述

面向对象的重点是类的设计->类的成员设计

属性:该类事物的状态信息,对应成员变量也对应field行为:要做什么样的操作,对应成员方法也对应method 面向对象完成具体功能的三步流程 创建类,并设计类的内部成员(属性,方法)创建类的对象,比如,Phone p1 = new Phone();通过对象调用内部属性和方法,完成相关功能。

虚拟机栈(栈):用于存放方法中声明的变量。

堆:new出来的结构。比如:数组实体,对象实体,包括对象中的属性。

方法区:存放类的模板,比如:Phone类的模板

每一个方法对应一个栈帧。方法内声明的变量也应该存放在栈帧里

创建类的一个对象

在这里插入图片描述

创建类的多个对象,属性赋值在这里插入图片描述 成员变量和局部变量的相同点和不同点

相同点: 在这里插入图片描述

不同点:

在这里插入图片描述

在这里插入图片描述

方法 是对象行为的抽象,用来完成某个功能操作,也成为函数或过程。实现代码重用,减少冗余,简化代码java中不能独立存在,必须定义在类里java中的方法不调用,不执行,每调用一次执行一次。方法内可调用本类中的方法或属性。方法内不能继续定义方法。 使用举例: 在这里插入图片描述

方法声明的格式: 权限修饰符【其他修饰符】返回值类型 方法名(形参列表)【throws 异常类型】{//方法头

//方法体 } 中括号中内容非必须

返回值类型:当调用此方法时,是否需要返回一个结果。

分类:

无返回值类型,使用void表示即可,比如:System.out.println(x)的println(x)方法,Arrays的sort().

有具体的返回值类型,需要指明返回的数据类型。可以是基本数据类型,也可以是引用数据类型。

需要在方法内配合使用return+返回值类型的变量或常量。

形参列表:形参,是局部变量。且可以说明多个。 格式:(形参类型1 形参1,…) 分类:无形参列表、有形参列表

无形参列表:不能省略一对()。如Math.random(),

有形参列表:根据需要的不确定的变量的个数,确定形参的类型和个数。

形参:声明时,一对括号内声明的一个或多个形式参数。 实参:方法在被调用时,实际传递给形参的变量或常量。

对象调用方法的过程:eat()等方法用完就弹出栈,不会保留。 在这里插入图片描述

方法的重载 定义:同一个类中,允许存在一个以上的同名方法,只要他们的参数列表不同即可。 满足这样特征的多个方法,彼此之间构成方法的重载。总结为:两同一不同 两同:同一个类,相同的方法名。 一不同:参数列表不同。①参数个数不同。②参数类型不同。

注意:方法的重载与形参的名、权限修饰符、返回值类型都没关系。 如何判断两个方法相同?方法名相同且形参列表也相同。(形参列表相同指的是参数个数和类型都相同,与形参名无关)

对象数组

定义:数组的元素可以是基本数据类型,也可以是引用数据类型,当元素是引用类型中的类的时候,我们称为对象数组。

内存解析

在这里插入图片描述

可变个数形参的方法(jdk5.0)

格式:(参数类型…参数名) 说明: ①可变个数形参的方法在调用的时候,针对于可变的形参赋的实参的个数可以为0,1,或多个 ②可变个数形参的方法与同一个类中,同名的多个方法之间可以构成重载 ③特例:可变个数形参的方法与同一个类中方法名相同,且与可变个数形参的类型相同的数组参数不构成重载 ④可变个数的形参必须在形参列表最后

方法的值传递机制 基本数据变量的局部变量传递的是数据值引用类型数据的局部变量数组和类类似,传递的是地址值。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 递归方法调用

在方法里自己调用自己叫做递归

分为直接递归和间接递归

说明:递归方法包含隐式循环,会重复执行某段代码但无须循环控制,一定要向已知方向递归否则会成为无穷递归,最终发生栈内存溢出。 注意:

①递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多,在使用递归时要慎重。

②在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存,考虑使用循环迭代。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有