Java的程序基础(2)

运算符

运算符和表达式

运算符:对常量或变量进行操作的符号

表达式:用运算符把常量或变量连接起来,构成的符合java语法的式子,就可以成为表达式。             不同运算符连接的表达式体现的是不同类型的表达式。

举例说明:

int a=10;

int b=20;

int a+b=30;

+:是运算符,并且是算术运算符   

 a + b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式。

1.算术运算符:

注意: (1)在进行自增(++)和自减(--)运算时,如果运算符++或--放在操作数的前面,则先进行自增或自减运算,再进行其他运算。反之,如果运算符放在操作数的后面,则先进行其他运算再进行自增或自减运算。

(2)在进行除法运算时,当除数和被除数都为整数时,得到的结果也是一个整数。如果除法运算有小数参与,得到的结果会是一个小数。例如,2510/1000属于整数之间相除,会忽略小数部分,得到的结果是2,而2.5/10的结果为0.25。

(3)在进行取模(%)运算时,运算结果的正负取决于被模数(%左边的数)的符号,与模数(%右边的数)的符号无关。例如,(-5)%3=-2,而5%(-3)=2。

2.赋值运算符:

注意事项:(1)在Java中可以通过一条赋值语句对多个变量进行赋值,具体示例如下:

int  x, y, z;

x = y = z = 5;              // 为三个变量同时赋值

在上述代码中,一条赋值语句将变量x,y,z的值同时赋值为5。需要注意的是,下面的这种写法在Java中是不可以的。

int  x = y = z = 5;        // 这样写是错误的 

(2)在表2-4中,除了“=”,其他的都是特殊的赋值运算符,以“+=”为例,x += 3就相当于x = x + 3,表达式首先会进行加法运算x+3,再将运算结果赋值给变量x。-=、*=、/=、%=赋值运算符都可以此类推。

3.比较运算符:

 注意:在比较运算中,不能将比较运算符“==”误写成赋值运算符“=”。

4.逻辑运算符:

 规则:

 使用逻辑运算符需要注意的问题。

(1)逻辑运算符可以针对结果为布尔值的表达式进行运算。例如,x > 3 && y != 0。

(2)运算符“&”和“&&”都表示与操作,当且仅当运算符两边的操作数都为true时,其结果才为true,否则结果为false。虽然运算符“&”和“&&”都表示与操作,但两者在使用上还有一定的区别。在使用“&”进行运算时,不论左边为true或者false,右边的表达式都会进行运算。在使用“&&”进行运算,当左边为false时,右边的表达式就不再进行运算,因此“&&”被称作短路与。

(3)运算符“|”和“||”都表示或操作,当运算符两边的任一表达式值为true时,其结果为true。只有两边表达式的值都为false时,其结果才为false。同逻辑与操作类似,“||”运算符为短路或,当运算符“||”的左边为true时,右边的表达式不再进行运算。

(4)运算符“^”表示异或操作,当运算符两边的布尔值相同时(都为true或都为false),其结果为false。当两边表达式的布尔值不相同时,其结果为true。

5.三元运算符:

语法:<表达式1> ?<表达式2> : <表达式3> 先计算<表达式1>的值, 当<表达式1>的值为true时,则将<表达式2>的值作为整个表达式的值; 当<表达式1>的值为false时,则将<表达式3>的值作为整个表达式的值。 int a = 55,b = 132,result; result = a > b ? a : b; System.out.println(result); //输出为:132

例子:

 注意:若条件为ture,运算结果是表达式1

若条件为false,运算结果为表达式2

流程控制语句

概念:用来控制程序中各语句执行顺序的语句,通过流程控制语句可以把语句组合成能完成一定功能的小逻辑模块。

分类:1.顺序结构:理解:先执行...再执行...

2.选择结构:理解:如果...,就...

分类:1.条件语句:

(1)if语句(单分支)

(2)if...else...语句(双分支)(类似三元运算符)

(3)if...else if ...else...语句(多分支)
    类似:三元运算符

2.switch条件语句:表达式中的取值:byte,short,int,char,enum(枚举),String

 

3.选择结构:

理解:如果...,就继续...

分类:(1).while

(2).do...while 跟while循环的区别:do...while至少会执行一次。

(3).for 一般用于已知循环次数的情况。

(4).循环嵌套:

跳转语句:(1)braak 在switch语句中的作用,是用于结束switch语句。

在循环语句中的作用,是用于结束循环。

(2)continue  用于循环语句中,它的作用是结束本次循环,进入下一次循环。

Java的编程基础-方法

方法的定义:方法就是一段可以重复调用的代码

 格式:修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,...)

{ //方法体

 执行语句  

...

 return 返回值; }

对于方法的语法格式,具体说明如下:

修饰符:方法的修饰符比较多,例如,对访问权限进行限定的修饰符,static修饰符,final修饰符等,这些修饰符在后面的学习过程中会逐步介绍。

返回值类型:用于限定方法返回值的数据类型。

参数类型:用于限定调用方法时传入参数的数据类型。

参数名:是一个变量,用于接收调用方法时传入的数据。

return关键字:用于返回方法指定类型的值并结束方法。

返回值:被return语句返回的值,该值会返回给调用者。

接下来通过一个案例演示方法的定义与调用,在该案例中,定义一个方法,使用“*”符号打印矩形

 

 方法分类:

1.无参无返回值

       public void methodName(){

   

       }

2.无参有返回值

        public int methodName(){

               return 1;

        }

3.有参无返回值

        public void methodName(String name){

              

       }

4.有参有返回值

       public int methodName(String name){

             return 1;

       }
 

方法重载:

概念:所谓方法重载,就是在同一个作用域内,方法名相同但参数个数不同或者参数类型不同的方法。

注意:方法重载跟返回值类型无关,同时跟参数名也无关。

方法中的值传递 可变参数 JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法。 方法的可变参数的声明如下所示: typeName... parameterName 在方法声明中,在指定参数类型后加一个省略号(...) 。 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

一维数组

数组的定义:数组是指一组类型相同的数据的集合,数组中的每个数据被称作元素。

特点:(以下内容出自

木易yves

1.数组可以存放任意类型的元素,但同一个数组里存放的元素类型必须一致。是一个对象,是一种引用数据类型。可以表示一组数据的集合。
2:数组只能保存一种类型的数据。
3:数组创建后元素默认有初始值。


4:数组中的每一个数据称为 元素 element。元素是在堆内存中分配的。而且是连续分配的。
5:数组的每一个元素都有一个序号,专业的称谓:下标、索引、角标。下标是从0开始的、升序的、连续的、0序的。
6:数组有一个属性:长度的属性,表示数组中元素的个数 该属性是 int 类型。 通过 数组名.length 来访问该属性。
7:数组中元素的下标的取值范围是:[0~length-1]。
8:通过new 关键字 在堆内存中元素被分配空间之后。每个元素被jvm 赋予默认值。
默认值规则:整数:0 浮点数:0.0 char:’\u0000’ boolean:false 引用数据类型:null。
9: 数组的每个元素通过 数组名[下标] 来访问。每个元素都是一个变量。和变量的用法一致。
10:数组变量、数组引用 保存的是 数组的实际元素的在堆内存中的"首地址"。
11: [] 代表的是 数组这种类型。
12:求下标是 n 的元素的地址:首地址+元素字节数*n。 数组根据下标访问元素的效率非常快。
13:数组的长度可以是 0,但是不能是 负数。
14:数组的长度一旦确定,就不能更改了。数组是定长的。

数组不进行初始化,系统默认初始化,不同类型数组元素的默认值如下表:


定义数组的方式有两种:

动态初始化: 

1.先声明数组再创建数组

数据类型[] 数组名;//声明数组

数组名 =  new 数据类型[长度];//创建数组

2.//声明数组并创建数组

数据类型[] 数组名 = new 数据类型[长度];

代码演示:

静态初始化:

1.类型[] 数组名 = new 类型[]{元素,元素,……};

2.类型[] 数组名 = {元素,元素,元素,……};

代码演示:

上述代码中,采用静态初始化的方式为每个元素赋予初值,其值分别是1、2、3、4。需要注意的是,文件中的第3行代码千万不可写成int[] x = new int[4]{1,2,3,4};,这样写编译器会报错。原因在于编译器会认为数组限定的元素个数[4]与实际存储的元素{1,2,3,4}个数有可能不一致,存在一定的安全隐患。

栈内存和堆内存的定义:

在方法中定义的一些基本类型的变量对象的引用变量都在方法的栈内存中分配,当在一段代码块中定义一个变量时,Java就在栈内存中为这个变量分配内存空间,当超出变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立刻被另作他用。

堆内存用来存放由 new 运算符创建的数组或对象,在堆中分配的内存,由Java虚拟机的垃圾回收器来自动管理。在堆中创建了一个数组或对象后,同时还在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,引用变量实际上保存的是数组或对象在堆内存中的首地址(也称为对象的句柄),以后就可以在程序中使用栈的引用变量来访问堆中的数组或对象。

图例:

 栈内存和堆内存的区别:

栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。
而堆内存中的对象对所有线程可见。堆内存中的对象可以被所有线程访问。

使用数组:

1.访问数组元素:数组名(索引)

2.给数组元素赋值:数组名【索引】=值;

常见错误:

1.数组下标越界异常:ArrayIndexOutOfBoundsException

2.空指针异常:NullPointerException

了解异常:所谓异常指程序中出现的错误,他会报告出错的异常类型、出错的行号以及出错的原因。

数组的常见操作:

1.数组遍历

在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历。接下来通过一个案例学习如何使用for循环遍历数组。

 2.数组最值

在操作数组时,经常需要获取数组中元素的最值。接下来通过一个案例来演示如何获取数组中元素的最大值。

3.数组排序

在操作数组时,经常需要对数组中的元素进行排序。下面为读者介绍一种比较常见的排序算法——冒泡排序。在冒泡排序的过程中,不断地比较数组中相邻的两个元素,较小者向上浮,较大者往下沉,整个过程和水中气泡上升的原理相似。

冒泡排序: 

 二维数组:

第一种方式: 数据类型[][] 数组名 = new数据类型[行的个数][列的个数];

第二种方式: 数据类型[][] 数组名 = new int[行的个数][];

第三种方式: 数据类型[][] 数组名= {{第0行初始值},{第1行初始值},...,{第n行初始值}};

案例:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅龙龙lsx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值