Java语法基础-1----4章

来源:互联网 发布:人工智能的英语怎么写 编辑:程序博客网 时间:2024/06/03 20:08

Java语法基础

熟悉使用Eclipse

1.创建的项目名称虽然和类名相同,但是它们分别代表Java项目和类文件

程序调试: 为验证Java单元的运行情况

断点:
单步跳过(f6):即运行单独的一行代码,但不是进入调用方法内部,然后跳到下一个可执行点并暂挂线程.
单步跳入 F5:执行该操作将跳入调用方法或对象内部单步执行程序 并暂挂线程.

三.Java语言基础

3-1Java主类结构

package Number;public class First {    static String s1 = "你好";    public static void main(String[] args) {        String s2 = "Java";        System.out.println(s1);        System.out.println(s2);    }}

1.文件名必须和类名相同
2成员变量和局部变量:通常将类的属性称为类的全局变量(成员变量),将方法中的属性称为局部变量,局部变量声明在方法体中.(s1为成员变量,s2为局部变量)
3.编写主方法 public,static,void分别是main()方法的的权限修饰符,静态修饰符,返回值修饰符,Java程序中的main方法必须声明为public static void. String[] args是一个字符串类型数组,它是main()方法的参数.

3-2基本数据类型

Java有8种基本数据类型:(8位等于1字节)
a.数值型(6种)—–整数类型:byte(占1字节),short(占2字节),int(占4字节),long(占8字节)
—–浮点类型:float(占4字节),double(占8字节)

//默认情况下,小数都被看作double类型,若要使用float型小数需要在小数后加f.//可以加d来表明确定这是一个double类型,不加d不会出错,但声明float必须加ffloat f1 = 12.32fdouble d1 = 456.12ddouble d2 = 456.12

b.字符型 char (占2字节16位存储空间)

char x = 'a';//由于在unicode表中排序位置是97所以这行代码可以写成char x = 97;

Java语言也把字符作为整数对待,若想得到一个0~65536之间的数所代表的unicode表中相应位置的字符,必须使用char型显式转换.

public class Gess { // 定义类    public static void main(String[] args) { // 主方法        char word = 'd', word2 = '@'; // 定义char型变量        int p = 23045, p2 = 45213; // 定义int型变量        System.out.println("d在unicode表中的顺序位置是:" + (int) word);        System.out.println("@在unicode表中的顺序位置是:" + (int) word2);        System.out.println("unicode表中的第23045位是:" + (char) p);        System.out.println("unicode表中的第45213位是:" + (char) p2);    }}

运行结果是上述代码运行结果
转义字符是一种特殊的字符变量,

转义字符 含义 \ddd 1~3位八进制数据所代表的字符,如\123 \uxxx 4位十六进制数据所代表的字符.如\u0052 \’ 单引号字符 \ 反斜杠字符 \t 垂直制表符,将光标移到下一个制表符的位置 \r 回车 \n 换行 \b 退格 \f 换页
//将转义字符赋值给字符变量时,与字符常量值一样需要使用单引号char c1 = '\\';char char1 = '\u2605';

c.布尔类型
布尔类型又称逻辑类型,通过关键字booleam来定义布尔类型变量,只有truefalse两个值,分别代表布尔逻辑中的”真”和”假”.
布尔值不能与整数类型进行转换 ,布尔类型通常被用在流程控制中作为判断条件.

booleam b;booleam b1,b2;booleam b = true;

3.3变量与常量

3.3.1

1.标识符:简单理解为一个名字,用来标识类名 变量名 方法名 数组名 文件名 的 有效字符序列
Java语言规定标识符有任意顺序的字母,下划线(_),美元符号($),和数字组成,并且第一个字符不能是数字
Java语言中严格区分大小写,如Good , good是两个不同的标识符,Java
eg: User Name 这是两个独立的单词,应该去掉中间的空格
这里写图片描述
2.关键字: Java语言中已经被赋予特定意义的一些单词,不能把这些单词作为标识符来使用.
关键字列表: int public this finally boolean abstract continue float long short throw throws return break for static new interface if goto default byte do case strictfp package super void try switch else catch implements private final class extend volatile while synchronized instanceof char protected import transient dafault double .

3.3.2

声明变量: 变量定义就是告诉编译器这个变量的数据类型 ,以及它能存放什么样的数据. —在程序运行过程中,空间的值是变化的,这个内存空间就成为变量. 为方便操作,给这个变量起个名字,称为变量名.
变量的命名必须是合法的标识符!

  • 变量名必须是一个有效的标识符
  • 变量名不可以使用Java关键字
  • 变量名不能重复
  • 应选择有意义的单词作为变量名

3.3.3

声明常量
标准语法如下
final 数据类型 常量名称[=值]
常量名通常用通常使用大写字母 是为了更清楚的表达正在使用常量

final double P1 = 3.14159;final booleam BOOL = true;

当定义的final变量属于”成员变量“时必须在定义时设定它的初值,否则将会产生编译错误

public class Part { // 新建类Part    // 声明常量PI,此时如不对PI进行赋值,则会出现错误提示    static final double PI = 3.14;    static int age = 23; // 声明int型变量age并进行赋值    public static void main(String[] args) { // 主方法        final int number; // 声明int型常量number        number = 1235; // 对常量进行赋值        age = 22; // 再次对变量进行赋值        // number = 1236;        // //错误的代码,因为number为常量,只能进行一次赋值        System.out.println("常量PI的值为:" + PI); // 将PI的值输出        System.out.println("赋值后number的值为:" +number);//将number的值输出        System.out.println("int型变量age的值为:" + age); // 将age的值输出    }}

3.3.4

变量的有效范围

变量有他的声明周期.因此,变量的有效范围是指程序代码能够访问该变量的区域,若超出该区域,则在编译器中会出现错误.
一般根据变量的”有效范围”将变量分为”成员变量”和”局部变量”
1.成员变量
在类体中定义的变量被称为成员变量,成员变量在整个类中都有效.
类的成员变量又可分为静态变量实例变量
eg:

class var{    int x = 45;//实例变量    static int y = 45;//静态变量}

在成员变量类型前面加关键字static 就变成静态变量,静态变量的有效范围可以跨类,甚至可以达到整个应用程序之内
对于静态变量除了定义它的类内存取还可以直接以”类名.静态变量”的方式在其他类内使用
2.局部变量
在类的方法体内定义的变量.

局部变量只在当前代码块中有效

  • 在类的方法中声明的变量,包括方法的 参数 ,都属于局部变量.
  • 局部变量只在当前定义的方法内有效,不能用于类的其他方法中
  • 局部变量的声明周期取决于方法,当方法被调用时,Java虚拟机为方法中的局部变量分配存储空间,当该方法调用结束后,则会释放方法中的局部变量所占用的存储空间,局部变量也会被销毁.

局部变量可与成员变量名字相同,此时成员变量将被隐藏,即这个成员变量在此方法中暂时失效.

实例:

public class Val{    static int times = 3;  //定义成员变量    public static void main(String[] args){    int times = 4;    System.out.println("times的值为:"+times);    }}//这条代码运 行结果为4

3.4运算符

sum += i; //sum = sun + i

1.= + - * / %(取余12%10 结果等于2)

3.4.3自增自减运算符

b = ++a(–a)//表示在使用变量a之前,先让a的值加(减)1.
b = a++(a–)//表示先将a赋值给b,再自增1.

3.4.4比较运算符

< >= <= !=
返回值类型false true

3.4.5逻辑运算符

&&(与) ||(或) !(非)

3.4.6位运算符

整数数据在内存中以二进制即形式表示,如int 型变量7的二进制表示是00000000 00000000 00000000 00000111

左边最高位是符号位,最高位是0为正数,最高位为1位为负数.
负数采用补码保存如-8, 11111111 11111111 11111111 11111000

1.按位与 &
为双目运算符
2.”按位或”运算 |
为双目运算符
3.”按位取反” 运算~
单目运算符
4.”按位异或” 运算 ^
双目运算符: 当两个操作数的二进制表示相同时(同时为0或同时为1),结果为0,否则结果为.

整数10的二进制 00000000 00000000 00000000 00001010
整数03的二进制 00000000 00000000 00000000 00000011
10^3的结果为9 00000000 00000000 00000000 00001001

5. 移位操作

  • <<: 左移
  • >>:右移
  • >>>:无符号右移

左移就是将运算符左边的操作数的二进制数据按照运算符右边操作数指定的位数向左移动,右边空位补0
右移,如果最高位是0,则右移空的为补0,最高位为1,则补1
Java提供了无符号右移>>> 五路最高位是0还是1,左侧被移空的位都填入0

移位运算适用的数据类型有 byte \short \ char \ int \ long

技巧::移位可以实现整数乘以除以2的n次方效果.左移是乘 右移是除
y<<2 与y*4的结果相同y>>1 与y/2结果相同

三目运算符

三目运算符的使用格式

条件式?值1:值2

//运算规则:若条件式的值为true,则整个表达式取值为1,否则取值2boolean b = 20<45?true:false;

3.4.8运算符优先级

这里写图片描述
运算符优先级

技巧:在编程是尽量使用括号运算符来限定运算次序,以免产生错误的运算顺序.

3.5数据类型转换

3.5.1隠式数据类型转换

从低级类型向高级类型转换,系统自动转换.下列基本数据类型会涉及数据转换,不包括逻辑类型和字符类型
精度由低到高依次为 : byte < short< int < long < float< double.

public class Conver {    public static void main(String[] args) {        byte mybyte  = 127;  //定义byte型变量允许的最大值赋给mybyte        int myint = 150;        float myfloat = 452.12f;        char mychar = 10;        double mydouble = 45.46546;        System.out.println("byte型与float型数据进行运算结果为:" + (mybyte + myfloat));        System.out.println("byte型与int型数据进行运算结果为:" + mybyte * myint);        System.out.println("byte型与char型数据进行运算结果为:" + mybyte / mychar);        System.out.println("double型与char型数据进行运算结果为:"  + (mydouble + mychar));    }}

结果为

3.5.2显式类型转换(强制类型转换)

执行显式类型转换会丢失精度.只要是boolean类型以外的其他基本类型转换,全部都能以显式类型转换的方法达到

当把一个整数赋值给一个byte short int long型变量时,不可以超出这些变量的取值范围,否则必须进行强制类型转换.

3.6代码注释与编码规范

1.单行注释 //
2.多行注释/* */
3.文档注释 /* (文档注释内容) /

一定要养成良好的编程风格,”可读性第一,效率第二”.所以程序员必须要在程序中添加适量的注释来提高程序可读性和可维护性,程序中注释要占程序代码总量的20%~50%

第四章 流程控制

4.1复合语句

这里写图片描述

4.2条件语句

4.2.1 if 条件语句

1.简单的if条件表达式

if(布尔表达式 x > y){    语句序列}

布尔表达式:必要参数,表示最后返回的结果必须是一个布尔值.它可以单纯的布尔变量或常量,也可以是使用关系或布尔运算符的表达式
语句序列:可选参数.

2. if…else语句

if(布尔表达式){    若干语句}else{    若干语句}

3.if…else if

if(条件表达式1){    语句序列1}else(条件表达式2){    语句序列2}...else if(条件表示n){    语句序列n}

4.2.2 switch多分支语句

switch(){    case 常量值1:        语句块1        break;    ...    case 常量值n:        语句块n;        break;    default:        语句块n+1;}

switch语句中表达式的值必须是整型.字符型.或者字符串类型
default语句也是可选的

4.3循环语句

4.3.1 while循环语句

语法如下:

while(条件表达式){    执行语句}

当条件表达式返回值为真时,则执行”{}”中的语句,执行完”{}”中的语句,重新判断条件,真,继续,假,跳出循环
这里写图片描述

4.3.2do while循环语句
语法如下

do{    执行语句}while(条件表达式);

这里写图片描述
4.3.3 for循环语句

1.for语句

语法如下

for(表达式1 ; 表达式2 ; 表达式3){    语句序列;}
  • 表达式1:初始化表达式,完成变量的初始化
  • 表达式2:循环条件表达式,值为boolean型的表达式
  • 表达式3:执行后续操作表达式,负责修正变量,改变循环条件

示例:

public class Circulate { // 创建类Circulate    public static void main(String args[]) { // 主方法        int sum = 0; // 声明变量,用于保存各数相加后的结果        for (int i = 2; i <= 100; i += 2) {            sum = sum + i; // 指定循环条件及循环体        }        // 将相加后的结果输出        System.out.println("2到100之间的所有偶数之和为:" + sum);     }}//输出2550.

这里写图片描述

2.foreach语句

语法如下:

for(元素变量x : 遍历对象obj){    引用了x的Java语句;}
public class Repetition { // 创建类Repetition    public static void main(String args[]) { // 主方法        int arr[] = { 7, 10, 1 }; // 声明一维数组        System.out.println("一维数组中的元素分别为:"); // 输出信息        for (int x : arr) {        //foreach语句,int x引用的变量,arr指定要循环遍历的数组,最后将x输出            System.out.println(x);        }    }}

4.4循环控制

4.4.1 break语句

使用break可以跳出switch结构.在循环结构中,同样也可以用break语句跳出当前循环,从而中断当前循环.
例4.14

public class BreakTest {    public static void main(String[] args) {        for (int i = 0; i <= 100; i++) {            System.out.println(i);            if (i == 6) {//如果i等于6则跳出循环                break;            }        }        System.out.println("---end---");//显示程序结束    }}

这里写图片描述

如果遇到循环嵌套的情况,break语句将只会使程序跳出包含它的最内层的循环结构,只跳出一层循环

例4.15在嵌套的循环中使用break跳出内层循环

public class BreakInsideNested {    public static void main(String[] args) {        for (int i = 0; i < 3; i++) {            for (int j = 0; j < 6; j++) {                if (j == 4) {// 如果j等于4的时候就结束内部循环                    break;                }                System.out.println("i=" + i + " j=" + j);            }        }    }}

运行结果
这里写图片描述
如果想让break跳出外层循环,Java提供了”标签功能”

标签名 : 循环体{        break 标签名;}//标签名:任意标识符    循环体:任意循环语句     

例4.16用带有标签的break跳出外层循环

public class BreakOutsideNested {    public static void main(String[] args) {        Loop: for (int i = 0; i < 3; i++) {// 在for循环前用标签标记            for (int j = 0; j < 6; j++) {                if (j == 4) {// 如果j等于4的时候就结束外层循环                    break Loop;// 跳出Loop标签标记的循环体                }                System.out.println("i=" + i + " j=" + j);            }        }    }}

这里写图片描述

4.4.2 continue 语句

跳过本次循环

public class ContinueTest {    public static void main(String[] args) {        for (int i = 1; i < 20; i++) {            if (i % 2 == 0) {// 如果i是偶数                continue;// 跳到下一循环            }            System.out.println(i);// 输出i的值        }    }}