Java学习——基础语法

1.注释

  • 平时编写代码时,在代码量比较少时,我们还可以看懂自己写的,但是当项目结构一旦复杂起来,我们就需要注释才能看懂

  • 注释并不会被执行,是给我们写代码的人看的

  • 书写注释是一个非常好的习惯

    注释有三种:

    * 单行注释	//开头
    * 多行注释    /* */
    * 文档注释    /**  */
    

2.标识符和关键字

标识符:Java所以的组成部分都需要名字。类名,变量名以及方法名,类型名数组名,文件名都被称为标识符

  • 所有的标识符都应该以字母(a-z,A-Z),美元符$,或者下划线_开始
  • 首字母之后可以是字母,美元符,下划线,或者数字的任何字符组合
  • 不能使用关键字作为变量名或者方法名,不能是true,false和null尽管它们不是关键字
  • 标识符是大小写敏感
  • 可以使用中文命名,但是一般不建议这样使用,也不建议使用拼音

关键字:具有特定用途或被赋予特定意义的一些单词

关键字都是小写的

在这里插入图片描述

3.数据类型

  • 强类型语言 Java

    要求变量的使用要严格符合规定,所有的变量都必须先定义再才能使用

  • 弱类型语言

在这里插入图片描述

字节,位,字符
  • 位(bit): 是计算机 内部数据 储存的最小单位,是一个八位二进制数

  • 字节(byte):是计算机中 数据处理 的基本单位,习惯上用大写B来表示

  • 1B=8bit

  • 字符:是指计算机中使用的字母,数字,字和符号

  • 二进制0b   八进制0   十进制     十六进制0x
    
  • 浮点数有精度 最好完全避免浮点数进行比较
    
  • 字符本质还是数字
    
  • 转义字符 制表符\t 换行\n
    

4.类型转换

由于Java是强类型语言,所有要进行有些运算时,需要用到类型转换

低------------------------------------>高
byte,short,char->int->long->float->double

运算时,不同类型的数据先转换为同一类型,然后进行运算

  • 强制类型转换 高->低 (类型)变量名
  • 自动类型转换 低->高
  • 注意:
    • 不能对布尔值进行转换
    • 不能把对象类型转换为不相干的类型
    • 转换时可能出现内存溢出,精度问题

5.变量和常量

变量

  • 变量就是可以变化的量

  • Java是一种强类型语言,每个变量都必须声明类型

  • Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域

    type    varName [=value] [{,varName[=value]}]
    数据类型  变量名   =值      可以用逗号隔开来声明多个同类型变量
    
  • 注意事项:

    • 变量都有类型,可以是基本类型,也可以是引用类型;
    • 变量名必须是合法的标识符
    • 变量声明是一条完整的语句,因此每一个声明都必须用;结束

变量作用域

在Java中,变量的作用域分为四个级别:类级、对象实例级、方法级、块级

类级变量又称全局级变量或静态变量,需要使用static关键字修饰,你可以与 C/C++ 中的 static 变量对比学习。类级变量在类定义后就已经存在,占用内存空间,可以通过类名来访问,不需要实例化

对象实例级变量就是成员变量,实例化后才会分配内存空间,才能访问

方法级变量就是在方法内部定义的变量,就是局部变量

块级变量就是定义在一个块内部的变量,变量的生存周期就是这个块,出了这个块就消失了,比如 if、for 语句的块。块是指由大括号包围的代码

常量

  • 常量(Constant):初始化后不能再改变的值

  • 所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变

    final 	常量名=值
    final double PI=3.1415926
    
  • 常量名一般使用大写

变量的命名规则

  • 所有的变量,方法,类名都要见名知意
  • 类成员变量,局部变量:首字母小写和驼峰原则(monthSalary)
  • 常量:大写字母和下划线(MAX_VALUE)
  • 类名:首字母大写和驼峰原则(GoodMan)
  • 方法名:首字母小写和驼峰原则{ run(),runRun() }

6.运算符

在这里插入图片描述

++i(–i) 表示在使用i之前,先使i的值增(减)1

i++(i–)表示在使用i之后,使i的值增(减)1

int m=2; int x=(2*m++)+m;//x=7

int m=2; int y=(2*++m)+m;//y=9

在这里插入图片描述

&:与 and

|:或 or

!:非 取反

短路运算:a&&b a,b为真则为true,a若为假则不判断b

​ a||b a,b有一个为真则为true,若a为真则不判断b

在这里插入图片描述

'a<<b’将二进制形式的a逐位左移b位,最低位空出的b位补0 'a="">>b’将二进制形式的a逐位左移b位,最低位空出的b位补0

7.包

  • 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间

  • 格式为

    package pkg1[.pkg2[.pkg3……]]
    
  • 一般用域名倒置作为包名

  • 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包,使用import语句完成

    import package1[.package2……].(classname|*);
    

8.JavaDoc生成文档

在IDEA中点击 Tools > Generate javadoc

9.Scanner对象

  • 之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入。

  • 基本语法

    Scanner s=new Scanner(System.in);
    
  • 调用Scanner对象的方法获得输出,如next(),nextByte(),nextShort(),nextInt(),nextDouble()等。上述方法执行时都会堵塞,程序等待用户在命令行输入数据回车确认

  • 通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据

凡是IO流的类如果不关闭就会一直占用资源,用完就关

  • next():一定要读取到有效字符才可以结束输入,有效字符前的空格 会被自动去掉,后的空格作为结束符,所有不能得到带有空 格的字符串
  • nextLine(): 以回车为结束符,返回的是回车之前所有的字符

10顺序、判断、循环

顺序结构

  • Java的基本结构就是顺序结构,除非特别指明,否则按照顺序一句一句执行
  • 顺序结构是最简单的算法结构
  • 它是任何一个算法都离不开的一种基本算法结构

**If语句 **IfDome、IfDome1

if(布尔表达式){
	//布尔表达式为true执行语句
}
if(布尔表达式){
	//布尔表达式为true执行语句
}else{
	//布尔表达式为false执行语句
}
if(布尔表达式1){
	//布尔表达式1为true执行语句
}else if(布尔表达式2){
	//布尔表达式2为true执行语句
}……else{
	//以上布尔表达式都不为true执行语句
}

switch语句 SwitchDemo

switch(expression){
	case value1:
	//变量值为value1时执行的语句
	break;
	case value2:
	//变量值为value1时执行的语句
	break;
	case value3:
	//变量值为value1时执行的语句
	break;
	……
	default:
	//都不是时执行的语句
	break;
}

循环 WhileDemo

while 循环:

while(布尔表达式){
	//循环内容
}
  • 只有布尔表达式为true,循环会一直执行下去
  • 我们大多数情况是会让循环停止下来,需要一个让表达式为false的方式结束循环
  • 小部分情况需要循环一直执行下去,比如服务器的请求响应监听等
  • 循环条件一直为true会造无限循环(死循环),正常编程中应该尽量避免死循环,死循环会影响程序性能或者造成程序卡死崩溃

do…while循环:

do {
	//执行语句
}while(布尔表达式);
  • 与while循环的区别是,do…while循环至少会执行一次
  • while循环先判断再执行,do…while循环先执行后判断

for循环 ForDemo1、ForDemo2、ForDemo3

  • for循环语句是支持迭代的一种通用结构,是最有效、灵活的循环结构
  • for循环执行的次数在执行前就已经确定的
for(初始化;布尔表达式;迭代){
	//执行语句
}

break和continue语句

  • break语句:如果在某次循环中执行了break语句,那么整个循环语句就结束了
  • continue语句:如果在某次循环中执行了continue语句,那么本次循环就结束了,不再执行循环体中continue语句后面的语句,而转让进行下一次循环

11.方法

  • Java方法是语句的集合,它们在一起执行一个功能

    • 方法是解决一类问题的步骤的有序组合
    • 方法包含与类或对象中
    • 方法在程序中被创建,在其他地方被引用
  • 方法本意是功能块,就是实现某个功能的语句块集合。我们在设计方法的时候,最好一个方法只完成一个功能,有利于后期扩张

  • 类名.对象.方法名()

  • 方法包括一个方法头和一个方法体

    • 修饰符:告诉编译器如何调用该方法,定义了该方法的访问类型,可选

    • 返回值类型:方法可能有返回值,returnValueType是方法返回值的数据类型,有些没有返回值,returnValueType关键字是void

    • 方法名:方法的实际名称。方法名和参数表共同构成方法签名

    • 参数类型:参数像一个占位符。当方法被调用时,传递值给参数,这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数个数。参数是可选的,方法可以不包含任何参数

      • 形式参数:在方法被调用时用于接收外界输入的数据
      • 实参:调用方法时实际传给方法的数据
    • 方法体:方法体包含具体的语句,定义该方法的功能

Java的唯一参数传递方式:值传递

  • 对于基本数据类型的参数,向该参数传值,传递的是值的拷贝
  • 而对于引用类型的参数,传递的是实参的引用(地址),而不是变量所引用的实体。对象,数组,接口作为参数属于引用类型参数
修饰符		返回值类型		方法名(参数类型 参数名){
		……
		方法体
		return 返回值;
}

调用方法:对象名.方法名(实参列表)

当方法返回一个值的时候,方法调用通常被当作一个值

int	larger=max(30,40);

当返回值是void,方法调用一定是一条语句

System.out.println("Hello World!");

方法的重载:就是在一个类中,有相同的函数名称,但形参不同的函数

规则:

  • 方法名称必须相同

  • 参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)

  • 返回值可以相同也可以不同,仅返回类型不同不足以成为方法的重载

递归:方法自己调用自己

利用递归可以用简单的程序来解决一些复杂的问题,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,只需要少量的程序就可以描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无线集合

递归包括两个部分:什么时候不调用自身方法,什么时候调用自身方法

12.数组

数组的定义

  • 数组是相同类型数据的有序集合

  • 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成

  • 每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。下标从0开始

数组的声明创建

  • 必须声明数组变量,才能在程序中使用,仅仅创建一个引用数组的存储地址

    • 语法:
    dataType[] arrayRefVar;  //首选
    或 dataType arrayRefVar[]; //C语言风格,不推荐
    
  • 使用new操作符来创建数组:

    dataType[] arrayRefVar=new dataType[arraySize];
    

    完成了两件事:

    • 使用new 数据类型[数组大小]创建了一个数组

    • 把这个新创建的数组的引用赋值给了变量arrayRefVar

      • double[] myList;

        由于Java把数组作为对象来处理,所以数组变量是引用类型的对象变量,其中存放实际数组的地址,声明它时只为数组变量在内存中分配空间,并没有给实际的数组对象分配空间,此时数组变量内容为null

      • myList=new double[5];

        当使用new操作符创建数组对象时,才为实际的数组对象分配内存空间,该存储空间为堆(HEAP),并把数组对象的内存地址放到数组变量中

        在这里插入图片描述

  • 数组的元素通过索引访问,数组索引从0开始

  • array.length 获取数组长度

数组的特点

  • 长度是确定的,一旦被创建,它的大小就是不可以改变的
  • 其元素必须是相同类型,不允许出现混合类型
  • 元素可以是任何数据类型,包括基本类型和引用类型
  • 数组变量属于引用类型,数组也可以看成是对象,数组中的每一个元素相当于该对象的成员变量。数组对象本身是在堆中的

初始化

静态初始化

int[] a={1,2,3};

动态初始化

int[] b=new int[10];
b[0]=1;
……

默认初始化:数组是引用类型,它的元素相当于类的实例变量,数组一经分配空间,其中每个元素也按照实例变量同样的方式默认初始化

数组边界

下标的合法区间:[0,ArrayName.length-1]

ArraylndexOutOfBoundsException:数组下标越界异常

数组使用

普通的For循环

For-Each循环

数组作为方法入参

数组作返回值

多维数组

多维数组可以看成是数组的数组,二维数组其中每一个元素都是一个一维数组

二维数组

int a[][]=new int[2][5]

二维数组a可以看成一个两行五列的数组

Arrays类

数组工具类java.util.Array 查看JDK帮助文档

冒泡排序

  1. 比较数组中两个相邻元素,如果第一个比第二个大或小,交换位置
  2. 每一次比较都会产生一个最大或最小的数字
  3. 下一轮少一次排序
  4. 循环到结束

时间复杂度为O(n2)

稀疏数组:当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组

处理方式:记录数组一共几行几列,有多少不同值。把具有不同值的元素和行列及值记录在一个小规模数组中,从而缩小程序的规模</b’将二进制形式的a逐位左移b位,最低位空出的b位补0>

学习B站狂神说
中国大学MOOC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值