Java 基础语法:语法、变量与运算
第一章:Java入门
第二章:基础语法、变量
一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。
- 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
- 类:类是一个模板,它描述一类对象的行为和状态。
- 方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的。
- 实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。
//实例
public class HelloWorld {
    /* 第一个Java程序
     * 它将输出字符串 Hello World
     */
    public static void main(String[] args) {
        // 输出 Hello World
        System.out.println("Hello World");
    }
}

2.1、基本语法
编写 Java 程序时,应注意以下几点:
- 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。
- 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass。
- 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
- 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。
- 主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行。
2.2、Java 标识符
Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
关于 Java 标识符,有以下几点需要注意:
- 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始。
- 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合。
- 关键字不能用作标识符。
- 标识符是大小写敏感的。
- 合法标识符举例:age、$salary、_value、__1_value。
- 非法标识符举例:123abc、-salary。
2.3、Java 修饰符
像其他语言一样,Java 可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:
- 访问控制修饰符 : default, public , protected, private。
- 非访问控制修饰符 : final, abstract, static, synchronized。
 在后面的章节中我们会深入讨论 Java 修饰符。
2.4、Java 数组
数组是储存在堆上的对象,可以保存多个同类型变量。在后面的章节中,我们将会学到如何声明、构造以及初始化一个数组。
2.5、打印Hello Java
这是 Java 入门练习的第一个程序,我们要做的就是把 “Hello Java” 打印到控制台。
public class Solution {
    public static void main(String[] args) {
		System.out.println("Hello Java");
    }
}
打印不带换行的 Welcome to LintCode
请编写代码,打印出不带换行的 Welcome to LintCode!
public class Solution {
    public static void main(String[] args) {
        System.out.print("Welcome to LintCode!");
    }
}
2.6、Java 关键字
| 关键字 | 说明 | 
|---|---|
| private | 私有的 | 
| protected | 受保护的 | 
| public | 公共的 | 
| default | 默认 | 
| abstract | 声明抽象 | 
| class | 类 | 
| extends | 扩充,继承 | 
| final | 最终值,不可改变的 | 
| implements | 实现(接口) | 
| interface | 接口 | 
| native | 本地,原生方法(非 Java 实现) | 
| new | 新,创建 | 
| static | 静态 | 
| strictfp | 严格,精准 | 
| synchronized | 线程,同步 | 
| transient | 短暂 | 
| volatile | 易失 | 
| break | 跳出循环 | 
| case | 定义一个值以供 switch 选择 | 
| continue | 继续 | 
| do | 运行 | 
| else | 否则 | 
| for | 循环 | 
| if | 如果 | 
| instanceof | 实例 | 
| return | 返回 | 
| switch | 根据值选择执行 | 
| while | 循环 | 
| assert | 断言表达式是否为真 | 
| catch | 捕捉异常 | 
| finally | 有没有异常都执行 | 
| throw | 抛出一个异常对象 | 
| throws | 声明一个异常可能被抛出 | 
| try | 捕获异常 | 
| import | 引入 | 
| package | 包 | 
| boolean | 布尔型 | 
| byte | 字节型 | 
| char | 字符型 | 
| double | 双精度浮点 | 
| float | 单精度浮点 | 
| int | 整型 | 
| long | 长整型 | 
| short | 短整型 | 
| super | 父类,超类 | 
| this | 本类 | 
| void | 无返回值 | 
| 以上共 48 个关键字,还有两个 保留字,但是他们不能使用,goto 和 const。 | 
第三章:数据类型
3.1、数据转换
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
// 转换从低级到高级。
// 低  ------------------------------------>  高
byte/short/char —> int —> long —> float —> double 
强制类型转换
public class Main{
    public static void main(String[] args){
        int i1 = 123;
        // 强制类型转换为 byte
        byte b = (byte) i1;	
        // int 强制类型转换为 byte 后的值等于 123
        System.out.println("int 强制类型转换为 byte 后的值等于" + b);	
    }
}
隐含强制类型转换
- 整数的默认类型是 int。
- 小数默认是 double 类型浮点型,在定义 float 类型时必须在数字后面跟上 F 或者 f。
3.2、字符的ASCII码
本题将通过控制台输入获取一个字符,并赋值于 character,请通过 System.out.println 语句输出 character 的 ASCII 码。
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        // write your code here
        // 通过 `Scanner` 类获取控制台输入流
        Scanner scanner = new Scanner(System.in);
        // 获取控制台输入的一个字符串
        char character = scanner .next().charAt(0);
        int ASCII = (int) character;
        System.out.println(ASCII);
    }
}
3.3、ASCII码对应的字符
给定一个 int 类型的数字 n,请通过 System.out.println 语句输出 n 对应 ASCII 码的字符,若超过 ASCII 码表的范围,则输出 error。
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sca = new Scanner(System.in);
        int n = sca.nextInt();
        if(n<0||n>127){
            System.out.println("error");
        }
    else{
            System.out.println((char)n);
        }
    }
}
3.4、引用类型
Java 为每种基本数据类型都提供了对应的包装器类型。
| 基本数据类型 | 包装类型 | 
|---|---|
| int | Integer | 
| byte | Byte | 
| short | Short | 
| long | Long | 
| float | Float | 
| double | Double | 
| char | Character | 
| boolean | Boolean | 
3.5、Integer 的取值范围
您的代码需要从标准输入流(控制台)中读入两个 Integer 类型的变量 a 和 b,请判断输入的两个变量 a 和 b 的值是否相等。
public class Solution {
    
    public boolean equivalence(Integer a, Integer b) {
        // write your code here
        return (int)a == (int)b;
    }
}
第四章:数组
4.1、Java 数组
Arrays工具类
java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。
下面列举一些常用的方法:
- 给数组赋值:通过 fill() 方法。
- 对数组排序:通过 sort() 方法,按升序。
- 比较数组:通过 equals() 方法比较数组中元素值是否相等。
- 数组转换:通过 asList() 将数组转换为 List (你可以在以后的章节里来学习 List)。
4.2、判断两个数组是否相等
给定两个无序整型数组 arr1 和 arr2 ,请判断这个数组中的元素是否相等(两个数组中的内容全等)。
请在类名为 Solution 的 equalityOfArrays 方法中
import java.util.*;
public class Solution {
    public boolean equalityOfArrays(int[] arr1, int arr2[]) {
        // -- write your code here --
        Arrays.sort(arr1);
        Arrays.sort(arr2);
        return(Arrays.equals(arr1,arr2));
    }
}
第五章 运算符
5.1、简单的加减乘除运算
本题需计算 a 与 b 的加减乘除,我们推荐使用 +,-,*,/ 来实现,
本题提供了 Solution 类,Solution 类中有四个方法,addition(加法),subtraction(减法),multiplication(乘法),division (除法)。
public class Solution {
    public int addition(int a, int b) {
        // write your code here
        return(a+b);       
    }
    public int subtraction(int a, int b) {
        // write your code here
        return(a-b);  
    }
    public int multiplication(int a, int b) {
        // write your code here
        return(a*b);  
    }
    public float division(int a, int b) {
        // write your code here
        return(float(a/b));
    }
}
5.2、数字 2 的朋友
我们定义判断一个 int 类型的数字是不是数字 2 的朋友的标准是,这个数字是不是由不同的两个 2 的幂次方数相加得到的。现在传入一个数字 n 请你判断它是否是数字 2 的朋友,如果是则返回 true,否则返回 false。
public class Solution {
    public static boolean isFriend(int n) {
        // write your code here
        if(n < 3) return false;
        for(int i = 1; i < n; i += i){
            for(int j = 1; j < n; j += j){
                if(i + j == n && i != j) return true;
            }
        }
        return false;
    }
}
5.3、小数字的和
先输入一个数字 n,再输入一个 n 个数的数组,求出这个数组中不与该数组中最大数相同的数字之和。
import java.util.*;
public class Main {
	public static void main(String[] args){
        // write your code here
        Scanner scan=new Scanner(System.in);
        int n=scan.nextInt();
        int[] arr=new int[n];
        for(int i=0; i<n; i++){
            arr[i]=scan.nextInt();
        }
        		Arrays.sort(arr);
			int sum = 0;
		  for (int i = 0; i < n; i++) {
			if(arr[i] < arr[n-1]){
			sum += arr[i];
			}
		}
		System.out.println(sum);
  }
}
5.4、这是什么三角形?
输入两个 int 类型的角度,现在使用这两个角度来合成一个三角形,请判断合成的三角形是 '直角三角形'、'锐角三角形'、'钝角三角形' 还是 '无法组成三角形'。
import java.util.*;
public class Main {
	public static void main(String[] args){
        // write your code here
        Scanner scan = new Scanner(System.in);
        int a = scan.nextInt();
        int b = scan.nextInt();
        int c = 180 - a - b;
        if(a>0 && b>0 && a+b <180){
          if(a<90 && b<90 && c< 90){
            System.out.println("锐角三角形");
          }else if(a + b==90 || a==90 || b==90){
            System.out.println("直角三角形");
          }else if(a>90 || b>90 || c>90){
            System.out.println("钝角三角形");
          }
        }else{
          System.out.println("无法组成三角形");
        }
  }
}
5.5、唯一存在的数字
给定一个非空的整数数组,在该数组中,有一个元素只出现了一次,其余元素均出现了两次,请找出只出现过一次的元素。请在 Solution 类中的 uniqueNumber 中写下你的代码。
import java.util.*;
public class Solution {
    public int uniqueNumber(int nums[]) {
        // write your code here
        Arrays.sort(nums);
        for (int i = 0; i < nums.length; i += 2) {
            // 最后一位时的操作
            if (i == nums.length - 1){
                return nums[i];
            }
            // 两两比较,如果不同,直接返回第一个
            if (nums[i] != nums[i + 1]) {
                return nums[i];
            }
        }
        return 0;
    }
}

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号