package com.company;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// write your code here
Main m=new Main();
Circle circle1;//新建一个引用,但是没有关联对象,现在是一个空指针,这样的引用不能直接用
Circle circle=new Circle();//新建引用,并新建对象,最后将他们关联起来
String s="123";//同上,相当于新建并给给对象赋值了
m.multiState(circle);//函数参数是shape,但是传入的是circle,这体现了多态。因为只要是shape的子类,必定含有shape的方法
/*java消除了前向引用的问题,尽管multiState的定义在后面*/
/*shape1和shape2共用一个存储空间,可以通过对象来定位它*/
Shape shape1=new Shape();
Shape shape2=new Shape();
Shape.a=1;
System.out.println(shape1.a);
System.out.println(shape2.a);
Shape.a++;
System.out.println(shape1.a);
System.out.println(shape2.a);
System.out.println("Hello,it's");
System.out.println(new Date());//创建了一个Date类型的对象,并将其转化为字符串类型。这行执行结束后,java就会自动回收这个对象占用的内存
System.getProperties().list(System.out);
System.out.println(System.getProperty("java.vm.name"));
}
//返回类型为void的时候,return只用于退出方法
void multiState(Shape shape/*参数中没有传递对象,而是传递对象的引用*/){//方法名和参数列表统称为方法签名,签名是方法的唯一标识。方法就是向对象发送消息,面向对象可以总结为:向对象发送消息
char c='x';//基本数据类型存放在栈区,不用担心空指针的问题,不是对象,不能进行对象的操作
Character ch = new Character('x');/*基本数据类型的包装类*/
Character ch1 = new Character(c);/*基本类型转化成包装类型,自动装箱*/
char c1=ch;/*包装类型转化为基本类型,自动拆箱*/
BigInteger bigInteger;//一种用于高精度的包装类型,不过没有对应的基本类型
BigDecimal bigDecimal;//同上
{//x的作用域在这个花括号里面,作用域以花括号为界
int x;
{
//int x=1;这里尽管在c语言中合法,但在java中是不合法的,编译器会报错。c语言中,里面的会覆盖外面的,但这种设计会导致程序混乱
}
Shape shape2=new Shape();//在这里创建了一个对象,他的作用域在花括号内,他的生命周期一直存在,只要程序员需要,它可以一直活下去。
/*垃圾收集器:尽管不受干扰下的对象的生命周期是无尽的,但是java的垃圾收集器会检查所有new出来的对象,并判断哪些不再可达,
若不可达,则把它占用的空间释放,这样就避免了内存泄漏问题*/
}
}
}
class Shape{
/*字段field*/
int i=0;/*基本类型,所有基本类型的默认值都是0(除了boolean),但是为了安全,最好显式得初始化变量
但这种默认值并不适用于局部变量,因为局部变量并不是类的字段,因此局部变量没有默认值*/
boolean j=false;/*默认值false*/
String k="a123456";/*引用类型*/
static int a=0;
/*方法method*/
void erase(){
int x;
}
void back(){
erase();//非静态方法可以调用静态字段和方法
move();
}
/*java中所有的代码都是写在类里面的*/
/*创建对象才能使用的方式在以下两种情况下是不足的,1,只想为特定指端分配一个空间,不想去创建对象 2,即是没有创建对象,也能调用该方法
* 静态就意味着该字段和方法不依赖任何特定的对象实例*/
static void move(){
go();
//erase();这句是错误的,静态方法使用之前不需要创建对象,因此不能直接调用非静态成员和方法(因为非静态成员和方法只能先实例化才能使用)
}
static void go(){
}
}/*创建了一个类,这决定了它的对象的外观与行为*/
class Circle extends Shape{
}