对象和类
Posted linfeng-up
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象和类相关的知识,希望对你有一定的参考价值。
类就像是菜谱,对象就像是菜。对象是类的实例。
对象=属性+方法。 对象是变量是类的具体实现。
类是规范定义是存在在纸面上的东西,从万千对象中抽象出来的共性。
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 报错
以上是关于对象和类的主要内容,如果未能解决你的问题,请参考以下文章