接下来进入Java语言中的重要的部分:面向对象
首先讲解一下类的概念:
类:是一组相关的属性和行为的集合体;
对象:是该类事物的具体体现;
类是java中最小的单位,体现了封装的思想,封装了成员变量和方法;
类是一个抽象的概念,不能直接进行调用,我们需要创建对象,对其进行实例化后,通过对象调用该类的方法和属性,对象才是该类的具体体现;
面向对象的例子:洗衣服
泡衣服——洗衣粉搓衣服——漂洗衣服——晾衣服
这一系列的动作是面向过程的洗衣服,如果是面向对象洗衣服,我们只需要用一个全自动洗衣机即可,只关注洗衣机,不用关注洗衣机到底是怎样洗衣服的;
面向对象的特点:封装,继承,多态;
学生事物与学生类的对应关系:
学生事物--------------------学生类
属性--------------------------成员变量
行为--------------------------成员方法
例子1:定义一个学生类
成员变量:姓名,年龄,学号
成员方法:睡觉,吃饭,上课
public class Student{
String name"小明";;
int age=12;
String number="130212";
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
public void study(){
System.out.println("上课");
}
}
既然定义了类,我们需要再定义一个测试类来调用此类:
创建对象格式:类名 对象名=new 类名
成员变量调用格式:对象名.变量名
方法调用格式:对象名.方法名(…)
public class StudentTest{
public static void main(String[] args){
Student student=new Student();//创建对象
System.out.println("姓名:"+student.name+",年龄:"+student.age+",学号:"+student.number);
student.sleep();
student.eat();
}
}
2.一般成员变量进行私有化,采用 set ,get 方法设置初值,得到初值。
private 私有的,用它来修饰成员变量,学生类和测试类的代码改为如下格式:
public class Student{
private String name;
private int age;
private String number;
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public void setNumber(String number){
this.number=number;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public String getNumber(){
return number;
}
}
在测试类中采用set设置初值,get 得到初值
public class StudentTest{
public static void main(String[] args){
Student student=new Student();//创建对象
student.setName("小明");
student.setAge(12);
student.setNumber("130212");
System.out.println(student.getName());//小明
System.out.println(student.getAge());//12
System.out.println(student.getNumber());//130212
}
}
3.一个类要包含:成员变量,构造方法,成员方法;上面我们介绍了成员变量与成员方法,接下来要说的就是构造方法了 ;
构造方法:名字与类名相同,没有void ,也没有return;
可以有参数,称之为有参构造,也可无参数,称之为无参构造;在没有定义构造方法时,系统默认为无参构造;当有确定的有参构造时,系统将不再默认为有无参构造了,如果此时需要用无参构造,需要定义出来;
采用有参构造可以直接在调用成员变量时给赋初值;
例如对学生类使用构造方法:
public class Student{
private String name;
private int age;
private String number;
public Student(String name,int age,String number){
this.name=name;
this.age=age;
this.number=number;
}
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public void setNumber(String number){
this.number=number;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public String getNumber(){
return number;
}
}
测试类如下:
public class StudentTest{
public static void main(String[] args){
Student student=new Student("小明",12,"130212");
System.out.println(student.getName());//小明
System.out.println(student.getAge());//12
System.out.println(student.getNumber());//130212
}
}
构造方法可以重载,方法名一致,参数不同,调用方法时根据参数不同,确定调用哪个方法;
4.接下来说下static关键字,其意思是静态的;
在其他的一些成员方法中我们也可以定义为静态的。但是有几点需要注意:1.静态方法中只能访问静态成员变量或者静态成员方法,非静态方法可以调用静态的,也可以调用非静态的。2.在静态方法中没有this关键字;
static关键字的特点:随着类的加载而加载;优于对象先存在;被类的所有对象所共享。
一般在调用static修饰的变量或者方法时,采用类名进行调用。
例子2:定义一个国籍为static成员变量,所有人共享这个国籍;
public class GuojiDemo {
private String name;
static String guoJi;//国籍是共用的,所以定义为static
public void setName(String name){
this.name=name;
}
public void setGuoJi(String guoJi){
this.guoJi=guoJi;
}
public String getName(){
return name;
}
public static String getGuoJi(){
return guoJi;
}
}
测试类:
public class TestGuoJi {
public static void main(String[] args) {
GuojiDemo guoJi1=new GuojiDemo();
guoJi1.setName("张三");
guoJi1.setGuoJi("中国");
System.out.println(guoJi1.getName());
System.out.println(GuojiDemo.getGuoJi());//被静态所修饰的成员,推荐使用类名调用
GuojiDemo guoJi2=new GuojiDemo();
guoJi2.setName("李四");
guoJi2.setGuoJi("美国");
System.out.println(guoJi1.getName());
System.out.println(GuojiDemo.getGuoJi());//静态内存中的中国被美国覆盖,故输出不一致
System.out.println(guoJi2.getName());
System.out.println(GuojiDemo.getGuoJi());
}
}
以上是我学习过程中的一些知识点的总结,如果有错误的地方,欢迎大家指正评论,希望我们一起学习,一起进步!