Java是一种面向对象(object oriented) 的语言!对象(object) 有点类似于C中的结构体,它由属性和方法组成。要创建一个对象,首先要创建一个类(class)。类是一个概念模型,定义了对象有哪些属性和方法。对象是类的一个实例,由类创建对象的操作叫做实例化。
- 类的名称就是文件的名称。
- 类名称的单词首字母全部大写!
在类的个数很多的时候,就有可能出现命名冲突的情况。包(package) 可以提供类的多层命名空间,并且控制包与包之间的访问权限。
- package语句应该放在源文件的第一行,每个文件中只有一个包定义语句。
- 包名称的单词首字母全部小写!
如果使用不同包中的其它类,需要使用该类的全名(包名+类名)。为了简化代码,可以使用import语句向文件中导入指定包层次下的某个类或全部类。
- import语句位于package语句之后。
导入某个类:
import example.Test;
使用*
导入全部类:
import example.*;
来创建一个类吧!
Person.java:
package mogeko;
public class Person{
private String name;
private int age;
public Person(String name,int age) {
this.name = name;
this.age = age;
}
public String intro() {
return "我叫"+name+",今年"+age+"岁!";
}
}
PersonTest.java:
package mogeko;
public class PersonTest{
public static void main(String args[]) {
Person kira = new Person("吉良吉影",33);
System.out.println(kira.intro());
}
}
运行结果:
我叫吉良吉影,今年33岁!
this关键字
如果类的方法中的某个局部变量和该类的成员变量同名,在使用这个成员变量时就要用到this
前缀。
构造方法
构造方法用来初始化类的一个新的对象,在使用new
运算符时调用。
如果在类中没有定义任何构造方法,则该类会自动生成一个默认的构造方法。
- 在一个类中,与类名相同的方法就是构造方法。
- 每个类可以具有多个构造方法,但要求它们各自包含不同的方法参数(可以是无参)。
- 构造方法没有任何返回值,默认返回类型就是对象类型。
public class Person{
private String name;
private int age;
public Person(String name) {
this.name = name;
}
public Person(String name,int age) {
this.name = name;
this.age = age;
}
public void tell() {
System.out.println("姓名:" + name + ",年龄:" + age);
}
public String toString() {
return "我叫"+name+",今年"+age+"岁!";
}
}
**提示:**Object 类具有一个toString()
方法,它返回一个 String 类型的字符串。如果一个类中定义了该方法,使用System.out.println(对象名)
就可以将返回的字符串内容打印出来。
创建对象
- 使用new关键字
Person a = new Person();
Person b = new Person("吉良吉影",33);
- 隐含创建对象
String str1 = "Hello";
其中的"Hello"就是一个隐含的String对象。
- 匿名对象
new Person("吉良吉影",33).tell();
这个语句实际上就是一个匿名对象,与之前声明的对象不同,此处没有任何栈内存引用它,所以此对象使用一次之后就等待被回收。
继承
定义一个继承类:
class Student extends Person{
}
子类继承父类的所有的属性和方法(除了构造方法)。
super()关键字
定义Person类的属性和有参构造方法:
public class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
那么,它的子类Student的构造方法应该为:
public class Student extends Person{
int number;
Student(String name, int age, int number) {
super(name, age);
this.number = number;
}
}
如果不写,Java会自动调用父类的无参构造方法,即super()