目录
在Java中,方法的定义也需要遵循一定的规范,这有助于提高代码的可读性和一致性。以下是一些Java方法定义的规范:
首先包层次如下所示:
private只可以在类中访问:
protected同一包中访问:
Test类和User类属于同一包下可以访问:
EasyTest类在easy包下和User类不属于同一包下所以不可以访问:
public可以被其他的类任意访问:
不同包下也可以访问:
1、接口命名:
- 接口名称应具有描述性,通常以able,ible或er结尾,例如Runnable,Serializable。
- 使用大写字母开头的驼峰命名法,例如PublicInterface。
- 避免使用Java关键字作为接口名称。
2、接口位置:
- 接口应该放在其使用者可以访问的位置。通常,这意味着接口应该放在一个包中,该包的名称反映了其用途。
3、方法命名:
- 接口方法应该是动词或动词短语,表示一个操作,例如start(),stop()。
- 方法也应该使用驼峰命名法,并且首字母小写,例如public void myMethod();。
4、注释:
- 对接口和其方法进行充分的注释,以便其他开发者理解它们的用途。
- 使用JavaDoc格式进行注释,以便可以通过工具生成API文档。
5、接口与实现分离:
- 接口不应包含任何具体的实现细节。这些细节应在实现接口的类中定义。
6、避免过于庞大:
- 避免创建过于庞大的接口,接口中的方法数量应适中。过于庞大的接口会使得实现类变得复杂和难以理解。
7、常量定义:
- 如果接口需要定义常量,则这些常量应该是公共的、静态的和最终的,通常这些常量都是大写字母,用下划线分隔单词,例如:public static final String CONSTANT_NAME = "value";
8、默认方法和静态方法:
- 在合适的情况下,可以使用默认方法和静态方法。默认方法可以在不破坏已有实现的情况下向接口添加新方法,而静态方法则可以提供与接口相关的工具性函数。
接口的定义 接口类中的方法和属性不要加任何修饰符号(public 也不要加)
???在JDK8以后接口中的方法也可以实现了,就是要在方法前面加一个default关键词。
实现接口使用implements,下面的图片中的代码有这么一行
Animal myDog = new Dog();
这一行是通过new Dog对象从而向上转型实现了Animal接口因为接口是不可以直接的被new出来的。
向上转型(Upcasting)和向下转型(Downcasting)是Java中两种重要的类型转换操作。
1、向上转型(Upcasting):
- 向上转型是将子类的引用转为父类的引用。
- 由于子类对象可以当作父类对象来使用(子类是父类的扩展),这种转换是自动的,不需要使用任何特殊的语法。
- 向上转型是安全的,不会丢失任何数据。示例:
????????????????class Animal { }
????????????????class Dog extends Animal { }
????????????????Dog dog = new Dog();
????????????????Animal animal = dog; // 向上转型, 自动完成
2、向下转型(Downcasting):
- 向下转型是将父类的引用转为子类的引用。
- 由于父类引用可能指向子类对象,也可能指向真正的父类对象,所以这种转换是不安全的,需要强制转换。
- 在转换前,通常会使用instanceof操作符来检查是否可以安全地进行向下转型。示例:
????????????????Animal animal = new Dog(); // 向上转型
????????????????if (animal instanceof Dog) { // 检查是否可以安全地向下转型为Dog类型
????????????????????????Dog dog = (Dog) animal; // 向下转型, 需要强制转换
????????????????????????// ...
????????????????}
- 使用有意义的变量名,变量名应清晰地表达变量的用途。
- 采用驼峰命名法,变量名首字母小写,例如 myVariable。
- 对于多个单词组成的变量名,使用驼峰命名法,例如 mySecondVariable。
- 使用合适的数据类型,避免不必要的数据类型转换和浪费内存。
- 在可能的情况下,优先使用基本数据类型而不是其包装类。
- 常量通常使用 static 和 final 关键字进行定义。
- 常量名全部大写,单词之间使用下划线分隔,例如 MY_CONSTANT。
- 常量不应被改变,因此在定义时应初始化。
class Counter {
static int count = 0; // 静态变量
Counter() {
count++;
System.out.println(count);
}
public static void main(String args[]) {
Counter c1 = new Counter();
Counter c2 = new Counter();
Counter c3 = new Counter();
}
}
// 输出
// 1
// 2
// 3
class Example {
static int cube(int x) { // 静态方法
return x * x * x;
}
public static void main(String args[]) {
int result = Example.cube(5); // 通过类名直接调用静态方法
System.out.println(result);
}
}