码迷,mamicode.com
首页 > 其他好文 > 详细

对象和类

时间:2019-10-31 21:59:12      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:ati   创建   基本   style   不能   没有   jvm   产生   对象内存   

类就像是菜谱,对象就像是菜。对象是类的实例。

对象=属性+方法。 对象是变量是类的具体实现。

类是规范定义是存在在纸面上的东西,从万千对象中抽象出来的共性。

op:oriented   procedure    面向过程

oo:oriented    object          面向对象,对象是主体,方法从属于对象

 

结构体vs类

结构体是多种变量的捆绑,成员默认为public

类=变量+方法     私有变量无法直接访问要通过父类的方法来间接访问

 

 

面向对象语言特点:认识性,类别性,多态性,继承性。

没有两个对象是完全一样的。

obj相当于是指针。

 

基本类型赋值v普通对象赋值

基本对象赋值通过拷贝而对象赋值则是reference赋值

public class ArgumentPassingTest {

public static void main(String[] args) {
int a = 1, b = 2;
swap(a,b);
System.out.println("a is " + a + ", b is " + b); //a=1, b=2,通过拷贝赋值a和b的值并没有发生变化

MyNumber obj1 = new MyNumber();
MyNumber obj2 = new MyNumber();
obj2.num = 10;
swap(obj1, obj2);
System.out.println("obj1 is " + obj1.num + ", obj2 is " + obj2.num); // obj1 10, obj2 5,通过reference赋值指针指向的位置发生的变化

}
public static void swap(int m, int n)
{
int s = m;
m = n;
n = s;
}
public static void swap(MyNumber obj3, MyNumber obj4)
{
int s = obj3.num;
obj3.num = obj4.num;
obj4.num = s;
}

}

技术图片

 

 

成员变量有默认值而局部变量没有默认值。

 

 

排序代码:

import java.util.Scanner;

public class Main

{
public static void main(String[] args)
{
//创建Scanner对象
//System.in表示标准化输入,也就是键盘输入
Scanner sc = new Scanner(System.in);
//利用hasNextXXX()判断是否还有下一输入项
int a = 0;
int b = 0;
int c = 0;
if (sc.hasNext()) {
a = sc.nextInt();
}

if (sc.hasNext()) {
b = sc.nextInt();
}
if (sc.hasNext()) {
c = sc.nextInt();
}
if(a==0 || b==0 || c==0)
{
System.out.println("输入不能为0");
System.exit(-1);
}
MyNumber obj1, obj2, obj3;

//从这里开始,基于swap函数,完善你的程序
obj1=new MyNumber();
obj2=new MyNumber();
obj3=new MyNumber();
obj1.num=a;
obj2.num=b;
obj3.num=c;
swap(obj1,obj2);
swap(obj1,obj3);
swap(obj2,obj3);
//
System.out.println(obj1.num);
System.out.println(obj2.num);
System.out.println(obj3.num);
//

//程序结束

}
public static void swap(MyNumber m, MyNumber n)

{

if(m.num > n.num)

{
int s = m.num;
m.num = n.num;
n.num = s;
}
}
}
class MyNumber
{
int num;
}

 

 

构造函数:在对象创建时就给成员变量赋值

技术图片

构造函数名称必须和类名相同,且无返回值。

每个java类必须要有构造函数,如果没有显示的定义构造函数Java编译器会自动为该类产生一个空的无形参构造函数。

一个类可以有多个构造函数,只要形参列表不相同即可

子类构造函数第一句话都默认调用父类的无形参构造函数super(),super语句必须要放在第一条。

iava无析构函数(消除对象),Java提供了内存自动回收机制,JVM会自动回收所分配的对象内存。回收效率的高低由垃圾回收器GC(GarbageCollector)回收算法来决定。

 

当变量(对象)被创建时,变量将占据内存;

当变量消亡时,系统将回收内存。

每个变量都是有生命周期的,它只能存储在离它最近的一对{}中。

 

 

信息隐藏和this指针

信息隐藏:1、保护属性信息;2、公开行为信息

属性:private

方法public

通过类的方法来间接的访问类的属性。

get和set方法都是共有public的

外界对成员的操作只能通过get和set方法

可以用java的IDE(eclipse)来快速生成get、set方法        source->generate getters and setters

       

this指针的作用:

1、this指针指向本类中的成员变量    this.m=m

2、this指针指向本类中的成员方法     this.add(m,n)

3、this指针可以代替本类的构造函数     this(5)

 

做题所得知识点:

1、class文件是字节码文件

2、形参名args可以修改

3、main方法可以被重载

4、double不精确,不能用于switch

5、变量名不能用数字打头当是可以用$和_打头

6、区分i++和++i

7、float类型要加f,不加默认为double类型(比如1.34)

8、

class Mixer {

    Mixer() { }

    Mixer(Mixer m) { m1 = m; }

    Mixer m1;//创建了类型为Mixer的变量m1,m1是引用地址指向内存new的地址空间

 

    public static void main(String[] args) {

        Mixer m2 = new Mixer();

        Mixer m3 = new Mixer(m2);  m3.go();

        Mixer m4 = m3.m1;  m4.go();//m3.m1实际上指向的是m2的内存地址空间有对应的对象就可以调用方法

        Mixer m5 = m2.m1;  m5.go();//m1变量没有new过没有实例化不能调用对象的方法

    }

    

    void go() { System.out.print("hi "); }

 

}

输出结果 hi hi 报错 

对象和类

标签:ati   创建   基本   style   不能   没有   jvm   产生   对象内存   

原文地址:https://www.cnblogs.com/linfeng-up/p/11770421.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!