面向对象:
面向对象是基于万物皆对象这个观点的。把一个对象抽象成类,具体上就是把一个类的静态特征和动态特征抽象成属性和方法,也就是把一类事物的算法和数据结构封装在一个类中,程序就是多个对象和互相之间的通信组成的。
面向对象具有封装性、继承性、多态性。封装隐藏了对象内部不需要暴露的细节使得内部细节的变动与外界脱离,只依靠接口进行通信,封装性降低了编程的复杂性。通过继承,使得新建一个类变得容易,一个类从派生类那里获得非私有方法和共用属性的繁琐方法交给了编译器。而继承和接口的实现在运行时的类型绑定所产生的多态,使得不同的类所产生的对象对同一方法体现出不同的功能,极大的提高了代码的通用性。
总之,面向对象的特性提高了大型程序的重用性和可维护性。
计算机语言
1. 机器语言:由0和1组成,电脑能理解,人很难理解。
2. 汇编语言:应用于硬件编程,需要使用汇编的软件把汇编语言编译成机器语言,然后再执行。电脑能理解,人也能理解。
3. 高级语言:更接近人类的语言,主要应用于软件编程,如:c,c++,php,java
java语言概述
java诞生于1995年在sun公司,在2009年被oracle收购。特点:
1. 简介有效:面向对象,简单易学;
2. 跨平台型好,java写好的程序可以在任何系统上运行,一次编译,处处运行。java为每一个平台都提供了一个jvm。
3. 适合大型企业级管理系统,大型互联网系统(分布式系统)。
java语言的分支
1. java SE(标准版):是java基础,早起j2se,2005年改名为java se
2. java ME(移动版):适合移动端的开发,j2me,2005改名java ME
3. java EE(企业版):面向企业级管理系统的
java运行机制
我们写的代码都是源代码(.java),不能执行,必须编译成字节码文件(.class)才能运行。
编译:javac 文件名.java
运行:java 字节码文件名
java文件经过编译产生字节码文件,运行需要jvm,把class文件载入到jvm才能运行。
java文件和class文件都在硬盘上,字节码文件运行时先在内存中创建java虚拟机jvm,将class文件载入到内存的jvm里,然后再运行。CPU负责调度。
环境变量classpath类路径
java文件和class文件所在的路径,配置完之后命令窗口重启。
配置了classpath,就可以在任意目录来运行java程序,当前目录下有同名的class文件时,依然先找的是classpath路径下的class文件,如果classpath下找不到,才在当前目录下查找。
面向对象概述
1. 面向过程:分析解决问题的所需要的步骤,然后用函数一步一步实现。
例1:把大象装进冰箱
1. 打开冰箱
2. 放入大象
3. 关闭冰箱
例2:做五子棋的游戏开发
1.开始
2.白子先走
3.绘制棋盘
4.判断输赢
5.黑子再走
6.绘制棋盘
7.判断输赢
……
2. 面向对象
OOP(objectoriented programing)面向对象编程
面向对象的思想是抽取一类具有相同属性和行为的事物。
例:冰箱:打开门,关闭门
大象:走路
棋子:走,黑子和白子
棋盘:绘制
规则:判断输赢
面向对象关注的是哪些事物具有什么样的功能,强调的是具体的事物。
数据类型:基本数据类型、引用数据类型;
基本数据类型:整数(byte,short,int,long),小数(float,double),字符(char),布尔(boolean);
引用数据类型:数组、类、接口。
在java中万物皆对象。
类
某些具有相同属性和行为的事物抽象成一类。
狗:
属性:颜色,眼睛,耳朵,重量
行为:看家,睡觉,摇尾巴
车:
属性:颜色,四个轮子,方向盘
行为:跑,刹车
类是一个概念,对象是一个具体的实物。
类类似是一个模板的东西,对象(实例)是根据这个模板产生的样本。
类:概念,抽象的
对象:具体的
类是一个概念,不能使用。根据类创建对象
栈内存:变量所指向的地址、main方法
堆内存:对象
方法区:所要用的类里的方法
类的对象的方法的调用;
局部变量和成员变量的差别:
局部变量:
1. 在方法中、语句块中;
2. 局部变量必须赋初始值才能用;
3. 都存储在栈中(存取速度快);
4. 生命周期:定义时产生,当前方法的括号或语句块的括号执行完毕消失。
成员变量(属性):
1. 在类里面定义;
2. 可以不赋初值,如果不赋初值都有默认值;
3. 存储在堆中;
4. 随着对象的消失而消失,会被jvm的垃圾回收机制回收掉。
匿名对象:
匿名对象是没有意义的,因为在栈中没有一个变量对它做引用,很快就会被垃圾回收机制回收掉。在实际开发中要避免匿名对象。
封装
概念:将类的属性私有化,只有本类才能够访问。
目的:提高数据的安全性,实现对属性的权限控制,增加了程序的可维护性。
如果在其他类中直接访问带有private 的属性时报错。
private修饰的属性只能在本类中访问。
public的权限:所有类都可以访问。
this关键字
打印一个对象时,输出的是这个对象的地址(jdk所提供的地址,不是内存提供的真正的地址)。
this只能在类的对象方法中使用。
this代表当前调用这个this所在的方法的对象的自身。
this可以在方法内区分同名的类的属性(有this)和参数名(没有this)。
程序执行流程说明:(Car.java)
第一步:java TestCar时,把TestCar.class载入到jvm,把main函数放入方法区,执行main方法压栈。
第二步:加载Car.class进入jvm,然后把run方法和introduce方法加载到方法区,在堆中开辟一个空间创建了一个Car对象,在栈中产生一个变量car指向堆中的对象,然后给car中的三个属性赋值。
第三步:car的run方法进栈,把car变量所指向的地址赋值给this关键字,执行方法体。
第四步:main方法出栈,run中的this消失。
第五步:car变量消失,main出栈消失。
第六步:由于car堆中的对象失去了变量的引用成了匿名对象,所以也被垃圾回收机制回收。
构造器
public 类名(数据类型 参数名 …){
}
特点:
1. 方法名和类名一致;
2. 方法名没有返回值没有void;
3. 参数可有可无。
目的:创建对象
※注意:如果类中没有带有参数的构造器,就可以使用一个隐藏的默认构造器来创建对象,如果一旦有带有参数的构造器,默认的构造器就会被覆盖,我们可以显式的定义出来默认构造器就可以使用了。
通过this(实参列表)可以调用本类中的构造器,但是注意,this必须是在方法中的第一行!
static关键字
1. 修饰在属性上
定义类属性:
staticint userCount;
类属性的访问:
类名.类属性名
对象名.类属性名<不推荐用>
栈:main,变量的地址
堆:new User(),
方法区:main,introduce,
数据共享区:类属性(静态的)
类属性的生命周期:User.class加载到jvm中产生,jvm消失时消失。
区别对象属性的生命周期:在对象创建时产生,对象所在的方法执行完成时消失。
2. 修饰在方法上
类方法:
public static 返回类型[void] 方法名 (数据类型 参数名 …){
方法体;
return 结果;
}
类方法的调用:与类属性相同。
在类方法中,不能使用对象的属性,只能用类属性。
---------------------------------------------------------------------------------------------------------------------------------
说是学习笔记,其实应该是复习笔记吧,最起码这一部分是,之前学习的时候没有记笔记,这次重新看,就记录下来吧~
会继续更新的,只是为了之后再复习时方便,有问题欢迎指正~