面向对象编程
与面向过程区别
- 面向过程强调的是功能行为,以函数为最小单位,考虑怎么做
- 面向对象,将功能封装进函数中,强调对象,调用方法,以类和对象为最小单位
- 也就是说有很多个函数,他们都有自己面向过程的代码;面向对象则考虑那个函数能实现自己的功能,然后调用函数为自己解决问题
面向对象分析问题
- 选择问题所代表的现实世界中的主体
- 从实体中寻找解决问题相关的属性和功能,这些属性和功能形成了概念世界中的类
- 把实体的类用JAVA语言描述给计算机
- 将类实例化成对象
类和对象
- 类和对象是面向对象核心概念
- 类是一类事物的描述,是抽象的,概念上的定义
- 属性=成员变量(构造函数)=field
- 方法=成员方法(函数)=method
- 对象是实际存在的该类事物的每个个体,也就是实例
- 面向对象程序设计重点是类的设计,也就是类的成员设计
- 类和对象的使用
- 创建类,设计类的成员
- 创建类的对象(new一个)
- 通过对象.属性和对象.方法
- 一个类创建多个对象,每个对象相互独立
- 权限修饰符:属性可以在声明时,指明其权限
权限修饰符 |
含义 |
private |
只能在自己包中调用 |
public |
任何包中都能调用 |
protected |
不同的包不能调用 |
缺省 |
不写权限修饰符 |
- 示例:
public class test1 {
public static void main(String[] args) {
Person p1=new Person();
p1.name="jack";
p1.age=20;
p1.sex='男';
System.out.println(p1.name);
p1.eat();
p1.say("chinese");
Person p2=new Person();
System.out.println(p2.name);
}
}
class Person{
String name;
int age;
char sex;
public void eat(){
System.out.println("人可以吃饭");
}
public void say(String language){
System.out.println("人可以说话,语言是" + language);
}
}
类中方法的说明
- 方法的申明
权限修饰符 返回值类型 方法名(形参列表){
方法体;
}
- 有无返回值和带不带形参
|
有返回值 |
无返回值 |
带形参 |
返回值类型 方法名(形参列表){} |
void 方法名(形参列表){} |
不带形参 |
返回值类型 方法名(){} |
void 方法名(){} |
return关键字
- 使用在方法体中
- 可以结束方法return;
- 返回数据return 数据;
- return后面不能有代码
- 示例:
public class test2 {
public static void main(String[] args) {
NumTest num1=new NumTest();
int newNum1=num1.add(4);
System.out.println(newNum1);
}
}
class NumTest{
int num=0;
public int add(int i){
num += i;
return num;
}
}
JVM说明
- 虚拟机栈,及栈结构,JAVA中局部变量都保存在栈结构中
- 堆,通过new方法出来的结构(数组,对象…)加载在堆空间中,对象的属性(非static)加载在堆空间中
- 方法区类的加载信息,常量池,静态域
万事万物皆对象
- 在JAVA语言中,我们将功能,结构等都封装到类中,通过类的实例化来调用具体功能结构
- JAVA与前端,数据库等交互式时,在JAVA中都体现为对象
匿名对象
- 创建的对象,没有显示赋给变量名
- 匿名对象只能调用一次
- 示例:需要传入的实参是一个对象时,可以用匿名对象传入
public class test3Phone {
public static void main(String[] args) {
new Phone().single=1999;
System.out.println(new Phone().single);
PhoneShop dis=new PhoneShop();
dis.phoneDis(new Phone());
}
}
class PhoneShop{
public void phoneDis(Phone phone){
phone.playGame();
}
}
class Phone{
int single;
public void showSingle(){
System.out.println("价格是");
}
public void playGame(){
System.out.println("玩游戏");
}
}