面向对象(上)
面向对象(上)
java面向对象学习三条主线
* 1.java类及类的成员:属性、方法、构造器、代码块、内部类
* 2.面向对象的三大特征:封装,继承,多态
* 3.其他关键字:this,super,static,final,abstract,interface,package,import等
面向对象的三大特征
- 封装
- 继承
- 多态
面向对象的思想概述
-
类和对象是面向对象的核心概念
类是对一类事物的描述,是抽象的,概念上的定义
对象是实际存在的该类事物的每个个体,因此称为实例(instance)
在java中万事万物皆对象
属性和方法
属性: 对应类中的成员变量
方法:对应类中的成员方法
package com.zx.oop;
/*
* 类和对象的使用
* 1.创建类,设计类成员
* 2.创建类的对象
* 3.通过对象.属性或对象.方法调用
*/
public class PersonTest {
public static void main(String[] args) {
//创建Person类的对象
Person pe=new Person();
//调用对象的属性和方法
//对象.属性
pe.name="Jack";
pe.isMale=true;
System.out.println(pe.name);
//对象.方法
pe.eat();
pe.sleep();
pe.spke("中国话");
}
}
class Person{
//属性
String name;
int age = 1;
boolean isMale;
//方法
public void eat() {
System.out.println("人可以吃饭");
}
public void sleep() {
System.out.println("人可以睡觉");
}
public void spke(String language) {
System.out.println("人可以说话,讲的话是"+language);
}
}
运行结果:
Jack
人可以吃饭
人可以睡觉
人可以说话,讲的话是中国话
类的多个对象之间的关系
在上面代码基础的pe.spke("中国话");的后面加上下面代码
//重新new一个对象
Person pe2=new Person();
System.out.println(pe2.name);//默认值为null
System.out.println(pe2.isMale);//默认值为false
//pe的对象地址赋值给pe3,所以指向的是堆里面的同一个实体
Person pe3=pe;
System.out.println(pe3.name);
pe3.age=99;
System.out.println(pe.age);//所以pe.age也是99
类中的属性(成员变量)和局部变量
属性(成员变量)和局部变量
-
相同点:
- 定义变量的格式是一样的
- 先声明,后使用
- 变量都有其作用域
-
不同点:
- 成员变量: 在类体内定义的变量称为成员变量,它的作用域是整个类,也就是说在这个类中都可以访问到定义的这个成员变量
- 局部变量:声明在方法内,方法形参,代码块内,构造器形参,构造器内部的变量
成员变量:在声明属性时,指明其权限,使用权限修饰符 局部变量:不可以使用权限修饰符
类的属性根据其类型都有自己的默认初始化值
成员变量: 整型(byte,short,int,long) 0 浮点型(float,double) 0.0 字符型(char) 0或"u0000" 布尔型(boolean) false 引用数据类型:null 局部变量: 必须在声明的时候初始化值,不然会编译报错,形式参数需要调用的时候才赋值,所以形参没有编译错误
内存中加载的位置
成员变量:加载到堆空间中(非static) 局部变量:加载到栈空间中
public class Demo10 { //成员变量 static int num=100; public static void main(String[] args) { System.out.println(num); add(); } //成员方法 public static void add(){ System.out.println("今天赚了"+num); } }
public class Demo10 { public static void main(String[] args) { int i,j;//main方法里面定义的局部变量 for (i=1;i<10;i++){ for (j=1;j<=i;j++){ System.out.printf(j+"*"+i+"="+i*j+" "); } System.out.printf(" "); } public void eat(){ String food="鸡腿"; System.out.print("李明喜欢吃"+food)//这里的food也是局部变量 } } }
方法
package com.zx.oop;
/*
* 类中的方法声明和使用
* 比如 :Math类:sqrt(),random()
* Scanner类 :nextInt()
*/
public class UserTest {
public static void main(String[] args) {
User user=new User();
user.eat();
String where=user.getNation("中国");
System.out.println(where);
}
}
//用户类
class User{
//属性
String name;
int age;
boolean isMale;
/* 方法的声明
*
* 权限修饰符 返回值类型 方法名 (形参列表 ){
* 方法体
* }
*
* 返回值类型:为有或无,有的话就为其返回的数据类型,无的话写void
*
* 方法名:属于标识符,遵循标识符的规范和规则,"见名知意"
*
* 形参列表:方法可以声明0个,1个,或多个形参,以逗号分隔
*
* return关键字的作用:
* 使用范围:方法体内
* 作用:结束方法。针对有返回值类型,使用"return 数据"方法返回所要的数据
*
* 方法的使用中:
* 方法中可以调用当前类的属性或方法
* 方法
*
*/
//void 修饰的表示没有返回值的方法
public void eat(){
System.out.println("用户吃饭");
}
public void sleep(int hour){
System.out.println("用户休息了"+hour+"小时");
}
/*
* String表示返回的数据类型为String类型,也可以是其他类型,在方法体中用return关键字返回,
* 如果没有返回值就用void修饰,通常没有返回值的方法就不用return,只能用"return;"结束方法
*/
public String getName() {
return name;
}
//String nation是方法里面的形式参数
public String getNation(String nation) {
String info="我的国籍是"+nation;
return info;
}
}
写的博客是为了面试的时候快速复习,有的知识点疏漏了也可以通过博客查看,坚持学习,坚持写博客。