Java面对象笔记(一)
类
类的定义:
- 类是相同或相似对象的一种抽象,是对象的一个模板,它描述一类对象的行为和状态。
- 类是具有相同属性和方法(行为)的对象的集合
定义一个类:
public class 类名 { //定义属性部分(成员变量) 属性1的类型 属性1; 属性2的类型 属性2; ... //定义方法部分 方法1 方法2 ... }
一个类可包含的变量
- 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
- 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
- 类变量:也叫静态变量,类变量也声明在类中,方法体之外,但必须声明为
static类型
对象
创建对象
public class NewObject { public static void main(String[] args) { People LiLei = new People(); //创建一个People对象LiLei LiLei.height =170; LiLei.age = 20; LiLei.sex = 1; LiLei.printBaseMes(); } }
使用对象的属性和方法
//引用对象属性 对象名.属性 //引用对象方法 对象名.方法
构造方法
在面向对象中有一个非常重要的知识点,就是构造方法。每个类都有构造方法,在创建该类的对象的时候他们将被调用,如果没有定义构造方法,Java 编译器会提供一个默认构造方法。 创建一个对象的时候,至少调用一个构造方法。比如在新建一个对象 new Object(),括号中没有任何参数,代表调用一个无参构造方法(默认构造方法就是一个无参构造方法)。构造方法的名称必须与类名相同,一个类可以定义多个构造方法。
1. 构造方法与类名相同,没有返回值,语法格式:
//与类同名,可以指定参数,没有返回值 public 构造方法名(){ //初始化代码 }
有参和无参
public class People{ //无参构造方法 public People(){ } //有一个参数的构造方法 public People(int age){ } }
引用对象
例子:
Object object1 = new Object(); Object object2 = object1; System.out.println(object1 == object2);
运行得到的结果为 true,说明 object1 和 object2 的内存地址相同 (== 会比较两个对象的内存地址是否相同),它们实际上是引用同一对象,如果改变 object1 对象内部的属性,那么 object2 的属性同样会改变
静态变量(static)
Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问
public class StaticTest{ public static String string="shiyanlou"; public static void main(String[] args){ //静态成员不需要实例化 直接就可以访问 System.out.println(StaticTest.string); //如果不加static关键字 需要这样访问 StaticTest staticTest=new StaticTest(); System.out.println(staticTest.string); //如果加上static关键字,上面的两种方法都可以使用 } }
静态方法
被 static 修饰的方法是静态方法,静态方法不依赖于对象,不需要将类实例化便可以调用,由于不实例化也可以调用,所以不能有 this,也不能访问非静态成员变量和非静态方法。但是非静态成员变量和非静态方法可以访问静态方法。
final
final 关键字可以修饰类、方法、属性和变量
final修饰类,则该类不允许被继承,为最终类final修饰方法,则该方法不允许被覆盖(重写)final修饰属性:则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)或在构造方法中赋值(但只能选其一)- final 修饰变量,则该变量的值只能赋一次值,即常量
权限修饰符
代码中经常用到 private 和 public 修饰符,权限修饰符可以用来修饰属性和方法的访问范围。

如图所示,代表了不同的访问修饰符的访问范围,比如 private 修饰的属性或者方法,只能在当前类中访问或者使用。默认 是什么修饰符都不加,默认在当前类中和同一包下都可以访问和使用。protected 修饰的属性或者方法,对同一包内的类和所有子类可见。public 修饰的属性或者方法,对所有类可见。
我们可以举一个例子,比如 money,如果我们用 private 修饰代表着这是私有的,只能我自己可以使用。如果是 protected 代表着我可以使用,和我有关系的人,比如儿子也可以用。如果是 public 就代表了所有人都可以使用。
封装
怎么实现封装
- 修改属性的可见性,在属性的前面添加修饰符 (
private) - 对每个值属性提供对外的公共方法访问,如创建 getter/setter(取值和赋值)方法,用于对私有属性的访问
- 在 getter/setter 方法里加入属性的控制语句,例如我们可以加一个判断语句,对于非法输入给予否定。

如果我们没有在属性前面添加任何修饰符,我们通过对象就可以直接对属性值进行修改,没有体现封装的特性。这在许多程序设计中都是不安全的,所以我们需要利用封装,来改进我们的代码。
首先在类里要将属性前添加 private 修饰符。然后定义 getter 和 setter 方法。修改 People.java 和 NewObject.java 的内容如下。
public class People { //属性(成员变量)有什么,前面添加了访问修饰符private //变成了私有属性,必须通过方法调用 private double height; //身高 //属性已经封装好了,如果用户需要调用属性 //必须用getter和setter方法进行调用 //getter和setter方法需要程序员自己定义 public double getHeight(){ //getter 方法命名是get关键字加属性名(属性名首字母大写) //getter 方法一般是为了得到属性值 return height; } //同理设置我们的setter方法 //setter 方法命名是set关键字加属性名(首字母大写) //setter 方法一般是给属性值赋值,所以有一个参数 public void setHeight(double newHeight){ height = newHeight; } }
现在 main 函数里的对象,不能再直接调用属性了,只能通过 getter 和 setter 方法进行调用。
public class NewObject { public static void main(String[] args) { People LiLei = new People(); //创建了一个People对象LiLei //利用setter方法为属性赋值 LiLei.setHeight(170.0); //利用getter方法取属性值 System.out.println("LiLei的身高是"+LiLei.getHeight()); } }
this
this 关键字代表当前对象。使用 this.属性 操作当前对象的属性,this.方法 调用当前对象的方法。
用 private 修饰的属性,必须定义 getter 和 setter 方法才可以访问到 (Eclipse 和 IDEA 等 IDE 都有自动生成 getter 和 setter 方法的功能)。
如下:
public void setAge(int age) { this.age = age; } public int getAge() { return age; }
创建好了 getter 和 setter 方法后,我们发现方法中参数名和属性名一样。
当成员变量和局部变量之间发生冲突时,在属性名前面添加了 this 关键字。 此时就代表将一个参数的值赋给当前对象的属性。同理 this 关键字可以调用当前对象的方法

浙公网安备 33010602011771号