Java是一门纯面向对象的语言(Object Oriented Program,简称OOP)。对象是对一些模块的封装,不用理解底层构造,可以直接使用提供的接口。大大简化了对程序设计的封装和通用性。
和c++中的类类似,java中的类也包括变量与方法。
类
类是一种抽象概念,可以理解为一种模版(比如电脑图纸)。对象是依据类的说明而实例化的产物(比如台式机,笔记本)。
关键字
class
public class Date { //这里遵循c++命名风格 public int _year; public int _month; public int _day; public void show() { System.err.println(_year + "年" + _month + "月" + _day + "日"); } }
上面就是一个简单的类,包括变量与方法。这里有新的关键字public,这里等下再说。
这里我们定义好了一个类那么如何使用呢?
//上面说过,类是一个模版(图纸),并不是真实的产物,所以要经过实例化才能生产可使用的对象 public static void main(String[] args) { //实例化 Date date1 = new Date(); //初始化,等会会讲到通用形式的初始化方法,而不是这种在类外部初始化 date1._year = 2024; date1._month = 5; date1._day = 15; date1.show();//这里调用date中的方法。因为方法show是在对象date1中,所以要用date1.去指明是date1中的show方法 }
上面就讲到了类的使用,首先要实例化,之后初始化,调用方法即可。如同买一部手机,下载软件,使用软件。
这里的date1.show(),既是指定了是什么模块的什么方法了。
public
//public 指明某个对象或方法为可以公共访问 //比如刚那个那个类中的变量均可在类外访问,就使用了关键字public
private
//这是是指明某个对象或方法只能在类内部使用 private _year; //这个对象只能在类内部访问,外部访问会直接报错
this
//this关键字是在类中指明类变量还是外部变量,这种一般用于函数变量与类变量相同使用 //如果不加this编译器会认为函数输入的变量自己给自己赋值。不过如果名字不一样,那么不需要加this,编译器会自动识别。 public void get(int _year,int _month, int _day) { this._year = _year; this._month = _month; this._day = _day; }
方法
java中有两种方法,一种是静态方法,一种是非静态方法。非静态方法依靠对象来调用,静态方法不需要对象
静态方法
不依靠实例化对象即可调用的方法
public class halloworld { //方法的定义 这里的static表示此方法是静态的,后面是方法。 public static void fun() {} public static void main(String[] args) { //方法的使用 halloworld.fun(); fun(); //这两种使用方法均可,第一种是指明了是什么类里面的方法,第二种由于是在定义该方法类里面调用,编译器默认可以找到,所以不用写类名。 } }
静态方法一般用于定义main方法中的通用方法,或者父类中的通用方法
非静态方法
依靠实例化对象才能使用的方法。
public class Test { //非静态方法的定义 public void fun() { System.err.println("Test..."); } } //注:这里的java类在不同java文件中 public class App { public static void main(String[] args) throws Exception { Test test1 = new Test(); test1.fun(); } }
这里的方法必须依靠实例化对象才能调用,不能直接调用,所以非静态方法也称为类方法。
特殊的静态方法
构造方法
构造方法是类在进行初始化时候调用的方法。
构造方法的要求:
1、方法名和类名相同
2、无修饰
public class Test { int _a = 1; //这里就是构造方法,不写构造方法编译器会自动生成,但是写了编译器就不会自动生成 Test(int a) { _a = a; } }
方法的一些注意事项
1、静态方法中不能使用this关键字,因为this是实例化后的对象才生成的,而类只是图纸未进行事例化,所以不可使用this关键字。
2、非静态方法的一些权限(public,private)。这些需要考虑是否向外界提供接口,比如向外界提供对私有成员的访问方法,修改方法。这些是需要多加考虑