java记录
java 包 package
相同包中的类名不能重复,不同包中的类名可以重复
包声明唯一,且位于第一行
import 关键字
import 可以有多行 用于导入某一个类
导入 某个包里的所有类 import package.*;
.java与.class文件区别
.java文件是编译前的文件(用javac命令去编译可以编译出.class文件),.class文件是编译后的文件(运行时直接 java 加名称即可,不需要加后缀)。
Java跨平台
JVM屏蔽了具体操作系统平台相关信息,实现程序与操作系统隔离。
用java写hello world 文件名必须与public类名一致
class Helloworld{
public static void main(String [] args)
{
System.out.println("hello,world");
}
}
这也可以看出来 .java 文件与 .class文件差异比较大
补充一下:
linux 下用命令行写入多行
cat <<EOF >Helloword.java
内容
EOF
编译完后的Java程序 直接 java Helloword 即可 不用加后缀
编译完成后去运行程序时 对.java源文件没有要求,但 .class文件必须保留且不可修改。
System.out.println()
输出流 会自动换行
类 Class
命名规则 大驼峰原则(这样命名会增大代码的可读性)
字段 Field
命名规则遵循小驼峰原则
方法 Method
main方法是程序的入口与c语言的 main 性质类似 所以有且仅有一个
构造方法
可变参数方法
参数数量不固定
public class Person{
int age;
String name;
public Person(String name )
{
this.age = 10;
this.name = name;
}
public static double average(int... nums)
{
int sum = 0;
for(int num : nums){
sum+=num;
}
double average = sum/nums.length;
return average;
}
public static void main(String [] args)
{
Person mine = new Person("chen");
//System.out.println(mine.age + mine.name);
double a = average(1,2,3);
System.out.println(a);
}
}
is-a关系
子类与超类的关系
葡萄与水果的关系
public class Fruit{
public void eat(); //Fruit具有eat的方法
}
class Peach extends Fruit{ //Peach是Fruit的子类
public void pink();
//Peach具有pink的方法,但是也继承了eat的方法
}
Fruit peach1 = new Peach(); //Peach是Fruit的子类,存在is-a关系
Peach peach2 = new Peach(); //正常创建对象
Peach fruits = new Fruit(); //由于is-a关系不可逆,因此这行代码是错误的!
java类成员的四种访问权限
public
protected
private
default
public<default<protected<private
一个文件多个类
我的文件名为 Person.java也可以运行成功
因为文件名必须与public的类名保持一致
class Country {
String name;
void value() {
name = "China";
}
}
class City extends Country {
String name;
void value() {
name = "Shanghai";
super.value(); //调用父类的方法
System.out.println(name);
System.out.println(super.name);
}
public static void main(String[] args) {
City c=new City();
c.value();
}
}
父子类的转换
class Parents{
......
}
class Child extends Parents{
......
}
public class Cast{
public static void main(String[] args){
//向上转换
Child child1 = new Child();
Parents parents1 = child1; //由Child类型的child1变为Parents类型的parents1
//向下转换
//只有当父类引用已经指向子类实例时才能进行向下转换
Parents parents = child1; //parents指向了Child的一个实例
//向下转换强制要求在括号内写入子类型
Child child2 = (Child) parents; //由Parents类型的parents变为Child类型的child2
}
}
静态导入
import static java.util.Calendar.MONDAY; //导入java.util.Calendar类中的静态字段MONDAY
public class Monday {
public static void main(String[] args){
System.out.println(MONDAY); //不需要使用类名
}
}
抽象类
抽象类不能被实例化,如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
接口(interface)与类的区别
接口类似于类,但接口的成员都没有执行方式,它只是方法、属性、事件和索引的组合而已,并且也只能包含这四种成员;类除了这四种成员之外还可以有别的成员(如字段)。
不能实例化一个接口,接口只包括成员的签名;而类可以实例化(abstract类除外)。
接口没有构造函数,类有构造函数。
接口不能进行运算符的重载,类可以进行运算符重载。
接口的成员没有任何修饰符,其成员总是公共的,而类的成员则可以有修饰符(如:虚拟或者静态)。
派生于接口的类必须实现接口中所有成员的执行方式,而从类派生则不然。
特性
接口中每一个方法都是隐式抽象的,接口中的方法会被隐式的指定为public abstract(只能是public abstract,其他修饰符都会报错)。
接口中可以含有变量,但是接口中的变量会被隐式的指定为public static final变量(并且只能是public,用private修饰会报编译错误)。
接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
抽象类与接口的区别
抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的。
接口中不能含有静态代码块以及静态方法(用static修饰的方法),而抽象类是可以有静态代码块和静态方法。
一个类只能继承一个抽象类,而一个类却可以实现多个接口。
使用
interface Interface{
//Interface接口中声明了一个未完成具体实现的echo方法
void echo();//接口中的方法会被隐式的指定为public abstract
}
//ComeTrue是Interface接口的一个实现类
public class ComeTrue implements Interface{
//在ComeTrue类中完成了echo方法的具体实现(重写)
//实现类必须实现接口所有的方法,否则就要声明为abstract抽象类
//一个实现类倘若实现了借口的所有方法,则这个实现类可称为基类(Base Class)
public void echo(){
System.out.println("Function 'echo' has been come true!");
}
public static void main(String[] args){
ComeTrue test = new ComeTrue();
test.echo();
}
}
interface Interface1{
//Interface接口中声明了2个未完成具体实现的echo方法
void read();
void write();
}
//IntDemo只实现了Interface接口的一个方法
abstract class IntDemo implements Interface1{
//在IntDemo类中仅完成了echo一个方法的实现,倘若没有声明IntDemo类为抽象类,编译时则会出现报错:
public static void echo(){
System.out.println("Only function 'echo' has been come true!");
}
public static void main(String[] args){
echo();
}
}
标签:java,记录,void,接口,public,抽象类,class
From: https://www.cnblogs.com/yhchen-blogs/p/16862383.html