2025暑期答辩

Java

Java基础

数据类型

  • 基本数据类型

    • 整型:byte(8位)、shortintlong

    • 浮点:floatdouble

    • boolean 整型值和布尔值之间不能进行相互转换

    • char

  • 对局部变量的声明:当变量可从对其赋的初始值来推断类型时,可以使用关键字var.

  • final:用来指示常量类型,通常放在主函数外部,相当于C语言中的const.

  • 字符串:String(不能对单个字符进行赋值)

输入和输出

需要包含库:

1
import java.util.*

输入:

  • 读取单个串:System.in.next()
  • 读取整行输入:System.in.nextLine()
  • 读取整数:System.in.nextInt()
  • 读取浮点数:System.in.nextDouble()

输出:

  • 直接输出:System.out.print()
  • 输出一行:System.out.println()

选择/循环结构:ifforwhileswitch语句

和c语言的语法大致相同.

带标签的break语句:类似于c语言的goto标签,不过break时跳出该标签的循环.

1
2
3
4
5
6
7
8
9
qwq:
while(1){
for(int i=1;i<=n;i++){
if(i>2){
...
break qwq;
}
}
}

数组

声明数组需要在类型说明后面紧跟中括号:

1
2
3
int[] a=new int[1000];
int[] a={1,2,3};
int[] a={1,2,3,};

数组长度是固定的且不能更改大小. 允许长度为0的数组.

获取数组长度:a.length

访问数组:使用下标,例如a[1]

for-each循环(与c++的stl遍历类似):

1
2
3
4
int[] a={1,2,3,};
for(int i:a){
...
}

允许数组直接拷贝,赋值即可,例如:

1
2
int[] a={1,2,3,};
int[] b=a;

多维数组:int[][]

1
2
3
4
5
int[][] a=new int[2][2];
int[][] a={
{1,1,},
{2,2,},
}

注释

与c语言相同,使用///**/.

对象类

java要求程序执行必须以类为基础.

在一个源文件中,只能有一个公共(public)类,且该类名必须与源文件名相同. 私有类的创建和命名不受限制.

执行的主程序函数必须在一个类中,该函数命名为main且只能存在一个main函数,作为整个程序的入口.

1
2
3
4
5
6
import java.util.*
public class Foo{
public static void main(String[] args){
System.out.println("Hello, world");
}
}

构造

和c++类似.

1
2
3
4
5
6
7
8
9
10
public class Bar{
private int a;
private double b;
private String c;
public Bar(int a,double b,String c){
this.a=a;
this.b=b;
this.c=c;
}
}

注意: java没有析构,因为java会自动回收内存空间.

静态

声明方法和作用效果和c++相同.

重载

和c++一致,根据参数类型和个数自动匹配合适的函数进行处理.

继承和多态

继承是通过已有的类创建新的类,多态指一个父对象可以有多个不同的子对象且共用父对象的公有变量和函数.

继承的规则与方法和c++大同小异.

Object

Object能够引用一切类型的对象,可以被看作所有类的父类.

例:

1
2
Object obj=new Bar(1,1.5,"abc");
Bar bar=(Bar)obj;// Object在对其它类型的变量赋值时,与从大到小的类型赋值操作相同,均需要进行强制类型转换.
  • getClass()方法:返回一个对象所属的类
  • equals()方法:用于检测一个对象是否等于另一个对象,参数为一个Object
  • toString()方法:返回一个对象的字符串描述(类似于php的var_dump()函数)
    • 对于一个字符串,如果用加号来连接一个对象,该对象将自动被toString()方法转化为一个字符串,例如:
1
2
int a={1,2,3,};
System.out.println(""+a);// 等价于 System.out.println(Arrays.toString(a));

序列化和反序列化

序列化:将对象表示为一个字节(byte[])序列用于存储,序列中包含对象中的数据及其类型;

反序列化:将字节序列从文件或输入中读取并将其中的对象数据还原到内存中.

输出流ObjectOutputStream)提供的writeObject()方法可以将一个对象序列化并输出,输入流ObjectInputStream)提供的readObject()方法则是将读入的序列化字符串进行反序列化并将数据还原以便程序使用.

序列化成功的两个条件:

  1. 要序列化的对象需要实现java.io.Serializable接口或serialize函数,示例如下:
1
2
3
4
5
6
7
8
9
import java.io.Serializable;
public class Foo implements Serializable{
public int a;
public double b;
public String c;
public void test(){
System.out.println(""+a+" "+b+" "+c);
}
}
  1. 该对象中所有属性需要可序列化(或标明其为临时变量).

反射:在程序运行状态下,通过反射可以对任意的类进行任何操作,动态地获取和修改程序的数据.

比如通过反射执行系统命令打开Windows系统的计算器:

1
2
Object run=Class.forName("java.lang.Runtime").getMethod("getRuntime",new Class[]{}).invoke(null);
Class.forName("java.lang.Runtime").getMethod("exec",String.class).invoke(run,"calc");

2025暑期答辩
本文链接:http://blog.ac1liu.com/p/5fd9f8a8.html
发布时间
2025年8月30日
许可协议
转载说明
请注明出处!