Java 基础语法:语法、变量与运算

发布时间 2023-12-01 23:38:15作者: 粥粥alg

第一章:Java入门

第二章:基础语法、变量

一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。

  • 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
  • 类:类是一个模板,它描述一类对象的行为和状态。
  • 方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的。
  • 实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。
//实例
public class HelloWorld {
    /* 第一个Java程序
     * 它将输出字符串 Hello World
     */
    public static void main(String[] args) {
        // 输出 Hello World
        System.out.println("Hello World");
    }
}

Alt text

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;
    }
}