java 基本语法

目录:
1. 关键字 & 标识符 
2. 变量

基本数据类型
基本数据类型转换
3. 运算符 
4. 程序流程控制

4.1 分之结构
4.2 循环结构
4.3 break&continue
5. 数组

二维数组
数组的常见异常
数组的常用的算法问题


关键字 & 标识符
关键字
关键字的定义和特点: 
定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词) 
特点:关键字中所有字母都为小写

用于定义数据类型的关键字:

class 、interface、enum、byte、short、int、long、float、double、char、boolean、void

用于定义数据类型值的关键字:

true、false、null

用于定义流程控制的关键字:

if、else、switch、case、default、while、do、for、break、continue、return

用于定义访问权限修饰符的关键字:

private、protected、public

用于定义类,函数,变量修饰符的关键字:

abstract、final、static、synchronized

用于定义类与类之间关系的关键字:

extends、implements

用于定义建立实例及引用实例,判断实例的关键字:

new、this、super、instanceof

用于异常处理的关键字:

try、catch、finally、throw

用于包的关键字:

package、import

其他修饰符关键字:

native、strictfp、transient、volatile

保留字 
Java保留字:现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字

byValue、cast、future、generic、inner、operator、outer、rest、var、goto、const

标识符
Java 对各种变量、方法和类等要素命名时使用的字符系列成为标识符。 
凡是自己可以起名字的地方都叫标识符。

定义合法标识符规则: 
由26个英文字母大小写,0-9,_或$组成
数字不可以开头
不可以使用关键字和保留字,但能包含关键字和保留字
Java中严格区分大小写,长度无限制
标识符不能包含空格
注意:在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。

Java中的名称命名规范:(不遵守,也不会出现编译的错误)

包名:多单词组成时所有字母都小写:xxxyyyzzz 
类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz 
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz 
常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ

变量
java中变量按照数据类型来分类:基本数据类型 vs 引用数据类型(数组 类 接口) 
基本数据类型:

整型:byte(8 bit) short int(默认类型) long 
浮点型:float double (默认类型) 
字符型:char(‘ ’) 
布尔类型: boolean(只能取值为true 或false,不能取null)

补充:按照在类中存在的位置的不同:成员变量 vs 局部变量

进制(了解) 
十进制 二进制 八进制 十六进制 
二进制:计算机底层都是用二进制来存储、运算。

二进制 与十进制之间的转换。
二进制在底层存储:正数、负数都是以补码的形式存储的。(原码、反码、补码)
四种进制间的转换
变量的运算:

①自动类型转换:容量小的数据类型自动转换为容量大的数据类型。 
short s = 12; 
int i = s + 2; 
注意:byte short char之间做运算,结果为int型!
②强制类型转换:是①的逆过程。使用“()”实现强转。
运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。

算术运算符: 
+ - + - * / % ++ – + 
注意:1) /: int i = 12; i = i / 5; 
2) %:最后的符号只跟被模数相同 
3)前++:先+1,后运算 后++:先运算,后+1 
4)+:String字符串与其他数据类型只能做连接运算,且结果为String类型。sysout(‘’ + ‘\t’ + ‘‘); vs sysout(“” + ‘\t’ + ‘‘);

赋值运算符: 
= += -= *= /= %= 
int i= 12; 
i = i * 5; 
i *= 5;//与上一行代码同样的意思 
【特别地】 
short s = 10; 
s = s + 5;//报编译的异常 
s = (short)(s + 5); 
s += 5;//s = s + 5,但是结果不会改变s的数据类型。

比较运算符(关系运算符): 
== > < >= <= instanceof

【注意】区分== 与 = 区别。 
进行比较运算操作以后,返回一个boolean类型的值 
4>=3 表达的是4 > 3或者 4 = 3.结果是true。

if(i > 1 && i < 10){ } 
不能写为:if(1 < i < 10){}

逻辑运算符(运算符的两端是boolean值): 
& && | || ^ ! 
【注意】区分 & 与 && 的区别,以及 | 与 || 的区别 
我们使用的时候,选择&& , ||

位运算符(两端是数值类型的数据): 
<< >> >>> & | ^ ~ 
【例子】1.如何交换m = 12和n = 5的值 
2.将60转换为十六进制输出。

三元运算符: 
(条件表达式)? 表达式1 : 表达式2; 
1)既然是运算符,一定会返回一个结果,并且结果的数据类型与表达式1,2的类型一致 
2)表达式1与表达式2 的数据类型一致。 
3)使用三元运算符的,一定可以转换为if-else。反之不一定成立。 
例子:获取两个数的较大值;获取三个数的最大值。

程序流程控制
4.1 顺序结构
程序从上到下逐行地执行,中间没有任何判断和跳转。

4.2 分支结构
根据条件,选择性地执行某段代码。 
有 if…else 和 switch…case两种分支语句。

if-else语句 


例如: 
实现: 
/* 
score>=90 等级为:A 
70<=score<90 等级为:B 
60<=score<70 等级为C 
score<60 等级为:D 
/*

import java.util.Scanner;
public class TestScore {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入学生成绩:");
        int score = s.nextInt();
        char level;
        if (score >= 90) {
            level = 'A';
            System.out.println("等级为:"+level);
        }
        if (score >= 70 && score < 90) {
            level = 'B';
            System.out.println("等级为:"+level);
        }
        if (score >= 60 && score < 70) {
            level = 'C';
            System.out.println("等级为:"+level);
        }
        if (score < 60) {
            level = 'D';
            System.out.println("等级为:"+level);
        }
    }
}

import java.util.Scanner;
public class TestScore {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入学生成绩:");
        int score = s.nextInt();
        char level;
        if (score > 90) {
            level = 'A';
        } else if (score >= 70) {
            level = 'B';
        } else if (score >= 60) {
            level = 'C';
        } else {
            level = 'D';
        }
        System.out.println("等级为:" + level);
    }
}

switch-case语句 


没有写 break; 语句,则在找到对应case语句后,还会继续向下执行。
其中变量可以是哪些类型? 可以是char,byte,short,int,枚举,String(jdk1.7),double、float等不可以。
case 条件:其中条件只能是值,不能是取值范围。
4.3 循环结构
根据循环条件,重复性的执行某段代码。 
有while、do…while、for三种循环语句。 
注:JDK1.5提供了 foreach 循环,方便的遍历集合、数组元素。

①初始化条件 ②循环条件 ③迭代条件 ④循环体 
for循环

格式: 
for(①;②;③){ 
//④ 
}
执行过程:①-②-④-③-②-④-③-….-④-③-②
while循环

格式: 
① 
while(②){ 
④ 
③ 
}

do-while循环

格式: 
do{ 
④ 
③ 
}while(②)

另: 
无限循环: 
for( ; ; ){} 
或者 
while(true){ 

说明:一般情况下,在无限循环内部要有程序终止的语句,使用break实现,若没有,那就是死循环。

1)嵌套循环例子,实现如下图: 


public class TestFor {
    public static void main(String[] args) {
        //上半部分
        for(int i = 0;i < 5; i++){
            for(int k = 0; k < 4-i; k++){
                System.out.print(" ");
            }
            for(int j = 0;j < i+1; j++){
                System.out.print("* ");
            }
            System.out.println();
        }
        //下半部分
        for(int i = 0; i < 4; i++){
            for(int k =0;k < i+1; k++){
                System.out.print(" ");
            }
            for(int j = 0; j < 4-i; j++){
                System.out.print("* ");
            }
            System.out.println();
        }
    }
}

2)实现九九乘法表 


public class TestJiuJiu {
    public static void main(String[] args) {
        for(int i = 1;i <= 9; i++){//一共有九行
            for(int j = 1;j <= i; j++){//每行有 i 个等式
                System.out.print(i + "*" + j + "=" + i*j + "\t");
            }
            System.out.println();
        }
    }
}

break和continue关键字
break:使用在switch-case中或者循环中 
如果使用在循环中,表示:结束“当前”循环

continue:使用在循环结构中,表示:结束“当次”循环

关于break和continue中标签的使用。

public class TestBreakContinue {
    public static void main(String[] args) {
        //break和continue中标签的使用
        label:for (int i = 1; i < 5; i++) {
            for (int j = 1; j < 10; j++) {
                if(j % 4 == 0){
                    //break;
                    //continue;
                    continue label;
                }
                System.out.print(j);
            }
            System.out.println();
        }
    }
}

数组
数组:相同数据类型的数据的组合。

1.一维数组
如: 
int score = 72; 
int score = 90; 
int score = 58;

使用数组: 
1. 静态初始化:在声明并初始化与给数组相应的元素赋值操作同时进行。 
int[] score1 = new int[]{72, 90, 58};//int[] score1 = {72, 90, 58}; 
2. 动态初始化:在声明并初始化与给数组相应的元素赋值操作分开进行。

int score2 = new int[3];
score[0] = 72;
score[1] = 90;
score[2] = 58;

注:数组长度一旦创建后数组长度不可变。 
声明数组的错误写法: 
1)String names = new String[5]{“AA”,”BB”,”CC”}; 
2)int a[10]; 
3)int i = new int[];

另外 
1. 对于byte、short、int、long数组元素值默认为0 
2. 对于float、double数组元素值默认为0.0 
3. 对于char数组元素值默认为空格 
4. 对于boolean数组元素值默认为false 
5. 对于引用类型的变量构成的数组而言,默认初始化为null,以String为例

2.二维数组
静态初始化:
int[][] scores;
scores = new int[][]{{1, 2,3},{3, 4, 5},{6}};
1
2
动态初始化:
String[][] names;
names = new String[3][2];//动态初始化之一
或者
names = new String[4][];//动态初始化之二(不指定二维的长度)
names[0] = new String[5];
names[1] = new String[4];
namse[2] = new String[7];

错误的初始化:

names = new String[][]; 
names = new String[][5]; 
都是未指定第一维长度。

Q:二维数组如何遍历?

for(int m = 0;m < score.length;m++ ){
        for(int n = 0;n < score[m].length;n++){
            System.out.println(score[m][n]);
        }
    }

一维数组练习:

/* 
从键盘读入学生成绩,找出最高分,并输出学生成绩。 
成绩>=最高分-10 等级为A 
成绩>=最高分-20 等级为B 
成绩>=最高分-30 等级为C 
其余 等级为D 
提示:先读入学生人数,根据人数创建int数组,存放学生成绩 
*/

public class TestStudentScore {
    public static void main(String[] args) {
        // 1,创建Scanner的对象,并从键盘获取学生的个数n
        Scanner s = new Scanner(System.in);
        System.out.println("请输入学生的个数:");
        int count = s.nextInt();// count记录学生的个数
        // 2,根据输入的学生个数n,创建一个长度为n的int型数组
        int[] scores = new int[count];
        int maxScore = 0;
        // 3,依次从键盘获取n个学生的成绩,并赋给相应的的数组元素,并获取n个学生中的最高分
        System.out.println("请输入" + count + "个数学生成绩:");
        for (int i = 0; i < scores.length; i++) {
            int score = s.nextInt();// 依次从键盘获取学生的成绩
            scores[i] = score;
            if (scores[i] > maxScore) {
                maxScore = scores[i];
            }
        }
        System.out.println("最高分为:" + maxScore);
        // 4,遍历学生成绩的数组,并根据学生成绩与最高分的差值,赋予相应的等级,并输出
        for (int i = 0; i < scores.length; i++) {
            char level;
            if (scores[i] >= maxScore - 10) {
                level = 'A';
            } else if (scores[i] >= maxScore - 20) {
                level = 'B';
            } else if (scores[i] >= maxScore - 30) {
                level = 'C';
            } else {
                level = 'D';
            }
            System.out.println("Student " + (i + 1) + " score is " + scores[i]
                    + " level is " + level);
        }
    }
}
 


数组的常见异常
//1.数组下标越界的异常:java.lang.ArrayIndexOutOfBoundsException
        int[] i = new int[10];
//      i[0] = 90;
//      i[10] = 99;

//      for(int m = 0;m <= i.length;m++){
//          System.out.println(i[m]);
//      }
        //2.空指针的异常:NullPointerException
        //第一种:
//      boolean[] b = new boolean[3];
//      b = null;
//      System.out.println(b[0]);

        //第二种:
//      String[] str = new String[4];
//      //str[3] = new String("AA");//str[3] = "AA";
//      System.out.println(str[3].toString());

        //第三种:
        int[][] j = new int[3][];
        j[2][0] = 12;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值