类和对象
类文件后缀:.java,
包(namespace):项目上右键创建
package _17bang.CD.Yz;
引入(using),注意import的是一个“类”,不是名称空间
import _17bang.YZ.Student;
但可以使用通配符 *,比如:
import _17bang.YZ.*;
没有partial类
访问修饰符:没有关键字internal(不能显式声明,默认即可,package中可见)
一个类文件只能有一个public类
static:可以由对象调用(只warning不报错)
引用类型和值类型
其他类成员
快捷键生成:alt+shift+s,
构造函数间调用:
public Student(int age) { this(); }
没有属性,只有getter和setter。所以也没有自动属性等一系列相关的语法。
private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; }
没有readonly关键字
final: 修饰变量/字段时,等同于 const
没有索引器
析构函数
protected void finalize() { }
静态和实例
没有static构造函数
顶级类不能static,内部类可以
继承
使用关键字extends表示继承,super表示基类
public class OnlineStudent extends Student { public OnlineStudent(int age) { super(age); } }
final:修饰类/方法,同sealed
instanceof:同is,没有as
Person fg = new Teacher(); System.out.println(fg instanceof Person); System.out.println(fg instanceof Teacher);
多态
没有virtual和override关键字,默认override(可用@Override标记)
没有new的hide
抽象方法和接口
没有接口的显式(explicit)实现
结构和日期
没有struct
日期使用Calendar类:
Calendar date = Calendar.getInstance(); //不能直接new出 date.set(2002, 8, 15); date.add(Calendar.YEAR, 2); System.out.println(date.get(Calendar.DATE));
格式化日期用DateFormat类:
System.out.println(DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA).format(new Date()));
枚举和位运算
不能自行设置枚举的底层数据
不能在枚举和整数类型间转换
枚举的常用方法:
Grade[] grades = Grade.values(); Grade result = Grade.valueOf("Failed"); int index = Grade.Failed.ordinal(); System.out.println("..........." + index);
Object:万物皆对象
没有值C#复杂的struct/class继承体系
反射
获得类型信息:
- getClass(),类似于getType()
- class属性,类似于typeof
Class c1 = o.getClass(); Class c2 = Object.class;
注释(Annotation)
使用 @ 符号
@Override protected void Learn(double score) { super.Learn(score); }
声明,关键字是@interface
import java.lang.annotation.*; public @interface Override { }
常用标注(Annotation)
- @Override:检查/确保当前方法是override/实现的父类/接口方法
- @Deprecated:标记“过期”
- @Target:指明Annotation能用于哪些目标元素
- @Inherited
String和StringBuilder
没有内插,可用String.format()替代
System.out.println(String.format("源栈欢迎你,%s同学,你的成绩是%f分", "周丁浩", 98.5));