this关键字
this引用的就是本类的一个对象。在局部变量或方法参数覆盖了成员变量时,
就要添加this关键字明确引用的是类成员还是局部变量或方法参数。
如果省略this关键字直接写成name=name,那只是把参数name赋值给参数
变量本身而已,成员变量name的值没有改变,因为参数name在方法的作用域中
覆盖了成员变量name。
类的构造方法:
(1).在类中除了成员方法之外,还存在一种特殊类型的方法,那就是构造方法。构造方式一个与类同名的方法
(2).对象的创建就是通过构造方法完成的。
(3).构造方法没有返回值.
(4).构造方法的名称要与本类的名称相同
public class AnyThing {
public AnyThing(){
this("this 调用有参构造参数");
System.out.println("无参数构造方法");
}
public AnyThing(){
this("this 调用有参构造参数");
System.out.println("无参数构造方法");
}
public AnyThing(String name) {
System.out.println("有参构造方法");
}
}
System.out.println("有参构造方法");
}
}
静态变量、常量和方法
public class StaticTest_01{
final static double PI=3.1415;//在类中定义静态常量
static int id; //在类中定义静态常量
public static void main(String[] args) {//主方法调用静态方法
method1();
}
public static void method1(){//在类中定义静态方法
method2();
}
public static void method2(){
System.out.println(StaticTest_01.PI);//调用静态常量
System.out.println(StaticTest_01.id);//调用静态变量
// StaticTest_01.method1(); //调用静态方法
}
}
final static double PI=3.1415;//在类中定义静态常量
static int id; //在类中定义静态常量
public static void main(String[] args) {//主方法调用静态方法
method1();
}
public static void method1(){//在类中定义静态方法
method2();
}
public static void method2(){
System.out.println(StaticTest_01.PI);//调用静态常量
System.out.println(StaticTest_01.id);//调用静态变量
// StaticTest_01.method1(); //调用静态方法
}
}
执行结果为:
3.1415
0
0
对象的创建
对象可以认为是在一类事物中抽象出某一特例,可以通过这个特例来处理这类食物出现的问题。
在该类创建对象,并在主方法中创建对象
public class CreateObject {//构造方法
public CreateObject(){
System.out.println("创建对象");
}
public static void main(String[] args) {//创建对象
new CreateObject();
}
}
public CreateObject(){
System.out.println("创建对象");
}
public static void main(String[] args) {//创建对象
new CreateObject();
}
}
执行结果:创建对象
访问对象的属性和行为
用户使用new操作创建一个对象后,可以使用“对象.类成员”来获取对象的属性和行为。
对象的属性和行为在类中是通过类成员变量和成员方法的形式来表示的,所以当对象获取类成员是,也相应获取了对象的属性和行为。
public class TransferProperty {
//用户使用new操作符创建一个对象后,可以使用“对象”类成员来获取对象的属性和行为。
int i=47;
public void call(){
System.out.println("调用call()方法");
for(i=0;i<3;i++){
System.out.print(i+"");
if(i==2){
System.out.println(" ");
}
}
}
public static void main(String[] args) {
TransferProperty t1=new TransferProperty();
TransferProperty t2=new TransferProperty();
t2.i=60;
//使用第一个对象调用类成员变量
System.out.println("第一个实例对象调用对象变量i的结果");
t1.call();
//使用第二个对象调用类成员变量
System.out.println("第二个实例化对象调用变量i的结果:"+t2.i);
t2.call();
}
//用户使用new操作符创建一个对象后,可以使用“对象”类成员来获取对象的属性和行为。
int i=47;
public void call(){
System.out.println("调用call()方法");
for(i=0;i<3;i++){
System.out.print(i+"");
if(i==2){
System.out.println(" ");
}
}
}
public static void main(String[] args) {
TransferProperty t1=new TransferProperty();
TransferProperty t2=new TransferProperty();
t2.i=60;
//使用第一个对象调用类成员变量
System.out.println("第一个实例对象调用对象变量i的结果");
t1.call();
//使用第二个对象调用类成员变量
System.out.println("第二个实例化对象调用变量i的结果:"+t2.i);
t2.call();
}
}
执行结果:
第一个实例对象调用对象变量i的结果
调用call()方法
012
调用call()方法
012
第二个实例化对象调用变量i的结果:60
调用call()方法
012
调用call()方法
012
如果希望成员变量不被其中任何一个对象改变,可以使用static关键字
以下为对象调用静态变量
public class AccessProperty {
static int i=47;//定义i为int类型赋值47为静态成员变量
public void call(){
System.out.println("调用call()方法");
for(i=0;i<3;i++){
System.out.print(i+"");
if(i==2){
System.out.println(" ");
}
}
}
public AccessProperty(){
}
public static void main(String[] args) {
AccessProperty t1=new AccessProperty();
AccessProperty t2=new AccessProperty();
t2.i=60;
//使用第一个对象调用类成员
System.out.println("第一个实例对象调用变量i的结果:"+t1.i++);
t1.call();
//使用第二个对象调用类成员变量
System.out.println("第二个实例化对象调用变量i的结果"+t2.i);
t2.call();
}
}
static int i=47;//定义i为int类型赋值47为静态成员变量
public void call(){
System.out.println("调用call()方法");
for(i=0;i<3;i++){
System.out.print(i+"");
if(i==2){
System.out.println(" ");
}
}
}
public AccessProperty(){
}
public static void main(String[] args) {
AccessProperty t1=new AccessProperty();
AccessProperty t2=new AccessProperty();
t2.i=60;
//使用第一个对象调用类成员
System.out.println("第一个实例对象调用变量i的结果:"+t1.i++);
t1.call();
//使用第二个对象调用类成员变量
System.out.println("第二个实例化对象调用变量i的结果"+t2.i);
t2.call();
}
}
执行结果为:
第一个实例对象调用变量i的结果:60
调用call()方法
012
调用call()方法
012
第二个实例化对象调用变量i的结果3
调用call()方法
012
调用call()方法
012
对象的引用
在java语言中尽管一切都可以看作对象,但真正的操作标识符实质上是一个引用,通常引用不一定需要有一个对象关联。
注意:
引用只是存放一个对象的内存地址,并非存放一个对象。
对象的比较
在java语言中有两种对象的比较方式,分别为“==”运算符与equals()方法。
用这个例子来说明其区别
public class Compare {
public static void main(String[] args) {
String c1=new String("abc");
String c2=new String("abc");
String c3=c1;
//使用”==“运算符比较c2与c3
System.out.println("c2==c3的运算结果为:"+(c2==c3));
//使用equals()方法比较c2与c3
System.out.println("c2.equeals(c3)的运算结果为:"+(c2.equals(c3)));
}
}
String c1=new String("abc");
String c2=new String("abc");
String c3=c1;
//使用”==“运算符比较c2与c3
System.out.println("c2==c3的运算结果为:"+(c2==c3));
//使用equals()方法比较c2与c3
System.out.println("c2.equeals(c3)的运算结果为:"+(c2.equals(c3)));
}
}
执行结果:
c2==c3的运算结果为:false
c2.equeals(c3)的运算结果为:true
c2.equeals(c3)的运算结果为:true
对象的销毁
每个对象都有生命周期,当对象的生命周期结束之时,分配该对象的内存地址将会被收回。
public class Destroy_销毁对象 {
public static void main(String[] args) {
String s=new String();
s=null;
}
}
public static void main(String[] args) {
String s=new String();
s=null;
}
}
这样可以销毁占用的内存。