面向对象
面向对象是一种思考问题的方式,是一种思想。通俗来说就是面向对象不是为了实现每一个步骤,而是描述某个事物在解决中的行为。
类是面向对象中最为重要的概念。类就是一类对象的统称,对象就是这一类具体的实例。
基本语法
//创建类
[访问限定修饰符] class 类名{
field;//成员属性
method;//成员方法
}
//实例对象
<类名> <对象名> = new <类名>();
上诉表述中:
- 类名的命名规则为“大驼峰”
- 实例化对象时类名首字母大写。
- [访问权限修饰符]是可以省略的。
实例:
class Person {
public int age;//成员属性 实例变量
public String name;
public String sex;
public void eat() {//成员方法
System.out.println("eat");
}
public void sleep() {
System.out.println("睡觉!");
}
}
public class Main(){
public static void main(String[] args){
Person person = new Person();
person.eat();//eat
person.sleep();//睡觉
}
}
类的成员
类的成员包括:属性、方法、代码块等。
属性
成员变量:
1. 普通成员变量public int name;
内存解析:成员变量在堆空间 存入的是地址值
2. 静态成员变量 public static int name;通过类名. 进行访问 Person.information()
内存解析:地址存储在方法区
3. 属性描述:
class person{
public int age;//成员属性 实例变量
public String name;
public String sex;
}
注意:
- 类的成员变量定义时,如果没有为其定义赋值,那就认为是一个有一个默认初始化值。
- 类的成员变量可以使用 . (点)对其进行访问。
- 访问时包括了读,也包括了写。
方法
用于描述一个对象的行为
class Person {
public void eat() {//成员方法
System.out.println("eat");
}
public void sleep() {
System.out.println("睡觉!");
}
}
成员方法分为:
-
静态方法
静态成员方法 public static void sleep(){}
-
普通方法
普通成员方法public void sleep(){}
static关键字
1、修饰属性
2、修饰方法
3、代码块
a)修饰属性:java中静态属性和类相关,同一个类不同实例化用静态属性。
class Test{
public int date;
public static int sum;
}
public class Main{
public static void main(String[] args){
Test t =new Test();
t.date++;
t.sum++;
System.out.println(t.date);//1
System.out.println(t.sum++);//1
System.out.println(Test.date);//编译不通过
System.out.println(Test.sum);//2
}
}
静态的成员变量 也叫做类变量 不依赖对象,只通过类名就可以进行访问,而普通成员变量不能直接用类名进行调用,调用静态成员时候忽略对象
b)修饰方法:
class Test{
public int date;
public static int num;
public static void sum(){
num = 10;
date = 2;//报错,静态方法不可访问非静态成员
}
}
public class Main{
public static void main(String[] args){
Test.sum();//10
System.out.println(Test.num)
-
静态方法属于类,而不属于类的对象。
-
可以直接调用静态方法,而无需创建类的实例。
-
静态方法可以访问静态数据成员,并可以更改静态数据成员的值。
注意:静态方法不能直接使用非静态数据成员或调用非静态方法(非静态数据成员和方法都是和实例相关的).this和super两个关键字不能在静态上下文中使用(this 是当前实例的引用, super是当前实例父类实例的引用, 也是和当前实例相关). 我们曾经写的方法为了简单, 都统一加上了 static. 但实际上一个方法具体要不要带 static, 都需要是情形而定.main 方法为 static 方法.
getter和setter方法
当使用private来修饰属性时,就无法直接调用属性,如果我们需要获取或者修改某个private属性时,就需要使用getter方法和setter方法。
class Test{
private String name;
private int age;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public static void show(){
System.out.println("name:"+name+"age:"+age) ;
}
}
public class Main{
public static void main(String[] args){
Person person = new Person();
person.setName("caocao");
String name = person.getName();
System.out.println(name);
person.show();
}
//运行结果为:caocao
name:caocao age:0
- getName 即为 getter 方法, 表示获取这个成员的值。
- setName 即为 setter 方法, 表示设置这个成员的值。
- 当set方法的形参名字和类中的成员属性的名字一样的时候,如果不使用this, 相当于自赋值. this 表示当前实例的引用。
构造方法
使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作。
使用规则:
- 方法名必须与类名相同
- 每个类中至少有一个构造方法(系统生成无参构造器)
- 构造方法声明带参构造器需要将成员属性加载进去,并且进行this.的当前对象引用
class Test{
public int age;
public String name;
public String sex;
public Test(){//无参
}
public Test(int age,String name,Stirng sex){
this.age = age;
this.name = name;
this.sex =sex;
}
}
其中带参构造器与无参构造器就构成了重载
代码块
代码块分为:
-
实例代码块(构造代码块){}:初始化实例数据成员
-
静态代码块static{} 初始化静态数据 (不管生成多少的对象,只会执行一次,并且是最先执行)
-
本地代码块:方法内部的代码块
先执行静态代码块(只执行一次),再执行示例代码块 ,最后执行构造器
匿名类对象
没有引用的对象称为匿名对象,只能在创建对象时使用并且一个对象只用一次。
class Test{
private String name;
private int age;
=public Test(int age,String name,Stirng sex){
this.age = age;
this.name = name;
this.sex =sex;
}
public static void show(){
System.out.println("name:"+name+"age:"+age) ;
}
}
public class Main{
public static void main(String[] args){
//匿名对象调用方法
new Person(19,"GuiYee",男).show();
}
}