类就像是菜谱,对象就像是菜。对象是类的实例。java
对象=属性+方法。 对象是变量是类的具体实现。算法
类是规范定义是存在在纸面上的东西,从万千对象中抽象出来的共性。eclipse
op:oriented procedure 面向过程函数
oo:oriented object 面向对象,对象是主体,方法从属于对象this
结构体vs类spa
结构体是多种变量的捆绑,成员默认为public指针
类=变量+方法 私有变量没法直接访问要经过父类的方法来间接访问对象
面向对象语言特色:认识性,类别性,多态性,继承性。blog
没有两个对象是彻底同样的。排序
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指针
信息隐藏:一、保护属性信息;二、公开行为信息
属性:private
方法public
经过类的方法来间接的访问类的属性。
get和set方法都是共有public的
外界对成员的操做只能经过get和set方法
能够用java的IDE(eclipse)来快速生成get、set方法 source->generate getters and setters
this指针的做用:
一、this指针指向本类中的成员变量 this.m=m
二、this指针指向本类中的成员方法 this.add(m,n)
三、this指针能够代替本类的构造函数 this(5)
作题所得知识点:
一、class文件是字节码文件
二、形参名args能够修改
三、main方法能够被重载
四、double不精确,不能用于switch
五、变量名不能用数字打头当是能够用$和_打头
六、区分i++和++i
七、float类型要加f,不加默认为double类型(好比1.34)
八、
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 报错