版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jvao_q7/article/details/76169871
31_面向对象_04_程序执行过程的内存分析_01.wmv
//属性:field:成员变量
属性作用范围是整个类体
在定义成员变量时可以对其初始化,如果不对其初始化,java使用默认的载对其初始化
(数值:0,0.0 char:\u0000, boolean:false,所有引用类型:null 如String)
//属性定义格式:【修饰符】属性类型 属性名 = 【默认值】
——【修饰符】可以省略。或为public,protected,private,static,final
——可以是任何类型,基本类型和引用类型
——合法的标识符即可。首字母小写,驼峰原则
//方法定义格式:
【修饰符】方法返回值类型 方法名(形参列表){
n条语句
}
对象是通过引用操作的
——JAVA中方法参数传递是:值传递!
return结束语句或返回值。
局部变量需要初始化才能用,全局变量系统会帮忙初始化为0。
栈:(自动分配连续的空间,后进先出)存放局部变量
堆:(不连续的空间)存放new出来的对象
方法区:类的信息,static变量,常量池(字符串常量)等
引用都是4个字节
32_面向对象_05_程序执行过程的内存分析_02.wmv
常量池有和其他类共享的机制
对象里面再引用对象,后进先出
33_面向对象_06_虚拟机内存管理_垃圾回收机制_c++和java的比较.wmv
Gaebage Collection:垃圾回收
c++由程序员来做
程序员无权调用垃圾回收器
程序员可以通过
System.gc().通知GC运行,但JAVA规范并不能保证立刻运行
finalize方法,是JAVA提供给程序员用来释放对象或资源的方法,但是尽量少用
34_面向对象_07_构造方法.wmv
构造器:构造方法:constructor
构造器用于构造该类的实例。
格式如下:
【修饰符】类名(形参列表){
//n条语句
}
是一种特殊的方法
通过new关键字调用
构造器虽有返回值,但是不能定义返回类型(返回值的类型肯定是本类),不能构造器里调用return.
如果我们没有定义构造器,则系统会自动定义一个无参的构造函数。
如果已定义则编译器不会添加!
构造器的方法名必须与类名一致
构造该类的对象,经常也用来初始化对象的属性
代码:
package cn.bjsxt.oop;
public class Point {
double x, y, z;
// 通过构造方法初始化对象的属性
public Point(double _x, double _y, double _z) {
x = _x;
y = _y;
z = _z;
}
//单独设置点的坐标
public void setX(double _x){
x = _x;
}
public void setY(double _y){
y = _y;
}
public void setZ(double _z){
z = _z;
}
public double distance(Point p){
return Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y)+(z-p.z)*(z-p.z));//当前这个点减去p点的x的平方然后相加,最后开方返回。
}
public static void main(String[] args) {
Point p = new Point(3, 4, 8);
Point p2 =new Point (200,40,80);// define
p.setX(10);
System.out.println(p.x);
System.out.println(p.distance(p2));
}
}
35_面向对象_08_方法重载_构造方法重载.wmv
方法的重载(overload)是指一个类中可以定义相同的名字,但参数不同的多种方法。
调用时,会根据不同的参数表选择对应的方法
两同三不同:
同一个类,同一个方法名,
不同:参数列表不同(类型,个数,顺序不同)
只有返回值不同不构成方法的重载(
int a(String str){}
void a{String i},
调用:a()
)
只有形参的不同的名称不同,不构成方法的重载
与普通方法一样,构成方法也可以重载
代码:
package cn.bjsxt.oop;
/**
* 测试重载
*
* @author jiahao
*
*/
public class TestOverload {
public int add(int a, int b) {
return a + b;
}//不同方法不会有歧义
public static void main(String[] agrs) {
MyMath m = new MyMath();
int result = m.add(4, 5);
System.out.println(result);
int result1 = m.add(1, 4, 5);
System.out.println(result1);
int result2 = m.add(4.2, 5);
System.out.println(result2);
int result3 = m.add(4, 5.2);
System.out.println(result3);
}
}
class MyMath {
int a;
//构造器的重载
public MyMath(){
}
public MyMath(int a){
this.a=a;
}
/*不构成重载,形参不同
* public int add(int c, int d) {
return a + b;
}
*/
public int add(int a, int b) {
return a + b;
}
/*返回值改成double,返回值不一样,不构成重载
public double add(double a, int b) {
return (double)(a + b);
}
*/
public int add(double a, int b) {
return (int)(a + b);
}
public int add(int a, double b) {
return (int)(a + b);
}
public int add(int a, int b, int c) {
return a + b + c;
}
}