一、面向对象
java是一种面向对象语言。面向对象、面向过程都是一种解决问题地思想,相比面向过程,面向对象的目的不是为了完成一个步骤,而是为了描述某个事物在解决问题过程中的行为。面向对象具有三大特性:封装、继承、多态(注:不能说这是java的三大特性,因为C++、Phython也是面向对象语言)。
二、类和对象的创建
类是对象的抽象,对象是类的具体表现。
我们通过class来命名一个类
public class Dog {
public String name;
public int age;
public String color;
public void bark(){
System.out.println(name +" 在汪汪叫");
}
public void eat(){
System.out.println(name +" 在吃东西");
}
}
然后我们通过new来实例化,创建出对象,这些对象都有相同的成员变量,我们可以进行赋值,也可以调用成员方法。(类体内声明的变量称为成员变量,类体内声明的方法称为成员方法)
public class Test {
public static void main(String[] args) {
Dog dog1 = new Dog();
Dog dog2 = new Dog();
dog1.name = "旺财";
dog2.name = "二哈";
dog1.bark();
dog2.bark();
}
}
三、this关键字
当我们想设计一个能初始化对象的成员方法时
public void setDog(String name, int age, String color){
name = name;
age = age;
color = color;
}
public class Test {
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.setDog("旺财", 5, "黄色");
System.out.println(dog1.name +" " + dog1.age +" " + dog1.color);
}
}
此时的代码并不能成功地初始化,因为方法内部的变量都别视为方法提供的局部变量。
使用this关键字,就可以调用成员变量。
public void setDog(String name, int age, String color){
this.name = name;
this.age = age;
this.color = color;
}
方法同理,在类中使用this.方法也可以调用成员方法。
四、构造方法
1.构造方法是一个没有返回值,方法名与类名相同的方法。
2.构造方法至少有一个,java会自带一个无参数,无具体实现的构造方法。
3.构造方法在创建对象的同时会被调用,我们可以把它设计成一个初始化变量的方法。这也意味着如果构造方法是有参数的,我们在创建对象时要提供参数。
class Dog {
public String name;
public int age;
public String color;
Dog(String name, int age, String color){
this.name = name;
this.age = age;
this.color = color;
}
}
public class Test {
public static void main(String[] args) {
Dog dog1 = new Dog("旺财", 5, "黄色");
System.out.println(dog1.name +" " + dog1.age +" " + dog1.color);
}
}
4.我们可以用this(),调用当前类的其他构造方法,但是这个this语句必须放在当前方法的第一行。
Dog(String name, int age, String color){
this.name = name;
this.age = age;
this.color = color;
}
Dog(String name){
this(name, 0, null);
}
五、封装
1.包
在java中, 为了更好的管理,可以将几个类放在一起,称为一个包(类似于一个文件夹中有几个相似的文件)。
我们通过import 关键字来导入包,从而实现包中的方法,java自身提供了一些类,如Date类,那我们就通过import java.util.Date来导入这个类。
2.访问权限
java通过上面四种访问权限符来设置访问权限,如
public class Dog {
public String name;
public int age;
public String color;
private double weight;
}
weight变量在经过private修饰后,就不能在其他的类中使用。
这样也就实现了java语言的封装。
六、static成员变量
static修饰的变量不属于对象,存储在方法区里,因此不能通过对象名来访问(不会报错,但是会报警告),应该通过类名访问。
七、static成员方法
static静态方法内部,不能使用非静态的成员,也不能有this