自学java (day13):this关键字

 

/**
 * this关键字:
 *      1、this是个关键字,翻译为:这个
 *      2、this是个引用,this是个变量,this保存内存地址指向自身,this存储在JVM堆内存的java对象内部
 *      3、创建多少java对象就有多少this
 *      4、this可以出现在实例方法中,this指向当前正在执行这个动作的对象(this代表当前对象)
 *      5、this在多数情况下可以省略不写
 *      6、this不能使用在带有static的方法当中
 *
 *      7、实例变量的访问必须要先创建对象才可以访问
 */

/**
 *              构造方法::::不带返回值
 *              实例方法::::带有返回值
 */
/**
 *      1、this什么时候不能省略????
 *      this关键字用来区分局部变量和实例变量的时候   this不能省略
 *      2、什么时候加this,什么时候不加this????
 *          实例变量和局部变量同名的时候必须加上this
 *          实例变量和局部变量不同名的时候可以不加this
 */
/**
 * 1、this可以在那里???
 *      this可以采用在实例方法中,代表当前对象【语法格式:this.】
 *      this也可以使用在构造方法中,可以通过当前的构造方法调用其他的构造方法【语法格式:this(实参)】
 * 重点【记忆】:::this();这种语法只能出现在构造方法的第一行,一个构造方法只能出现一次this();
 */

 

public class Test {

    //带有static的方法
    public static void method1(){
        //调用doSome(带static)
        //完整方式调用
        Test.doSome();
        //省略方式调用
        doSome();

        //调用doOther(没有static)
        //完整方式调用
        Test t=new Test();
        t.doOther();
        //省略方式调用
            //不带static的没有省略的方式

        //访问i
        //采用完整方式访问
        System.out.println(t.i);
        //省略方式访问
                //没有省略的方式

    }

    //不带有static的方法
    public void method2(){
        //调用dosome
        //完整方式调用
        Test.doSome();
        //省略方式调用
        doSome();

        //调用doother
        //完整方式调用
        Test t=new Test();
        t.doOther();
        //省略方式调用
        doOther();

        //访问i
        //采用完整方式访问
        System.out.println(this.i);
        //省略方式访问
        System.out.println(i);

    }

    //主方法
    public static void main(String[] args){
        //要求在这编写程序调用mothod1(带static)
        //使用完整方式调用
        Test.method1();
        //使用省略方式调用
        method1();

        //要求在这编写程序调用mothod2(不带static)
        //使用完整方式调用
        Test t=new Test();//需要先创建对象在使用(引用.类名)的方式
        t.method2();
        //使用省略方式调用
              //不带static的没有省略的方式

    }

    //没有static的变量
    int i=10;

    //带有static的方法
    public static void doSome(){
        System.out.println("do some!");
    }

    //不带static的方法
    public  void doOther(){
        System.out.println("do other!");
    }
}

//顾客类

public class Customer {

    //名字
    String name;

    //构造方法
    //无参构造
    public Customer(){

    }

    //有参构造
    public Customer(String name){
        this.name=name;
    }

    //购物
    //不带static  属于“实例方法”
    public void Shopping(){

        //张三购物的时候输出:张三在购物
        //李四购物的时候输出:李四在购物

        // System.out.println(name+"在购物");
        System.out.println(this.name+"在购物");//this可以省略不写
    }

    public static void tesr(){

        //创建对象
        Customer c=new Customer();
        c.name="fgf";
        System.out.println(c.name);

        Customer c1=new Customer("fafa");
        System.out.println(c1.name);

    }
}
public class CustomerTest {
    public static void main(String[] args){

        //创建Customer对象
        Customer c1=new Customer();
        c1.name="zhangsan";

        c1.Shopping();

        //创建Customer对象
        Customer c2=new Customer();
        c2.name="lisi";

        c2.Shopping();

        //调用tesr
        Customer.tesr();


    }
}

/**
 *      1、this什么时候不能省略????
 *      this关键字用来区分局部变量和实例变量的时候   this不能省略
 *      2、什么时候加this,什么时候不加this????
 *          实例变量和局部变量同名的时候必须加上this
 *          实例变量和局部变量不同名的时候可以不加this
 */
//用户类
public class User {
    //属性
    private int id;//实例变量
    private String name;//实例变量

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

//构造函数
    //无参构造方法
    public User(){

    }

    /**
    //有参构造,,,,,,之前的有参构造方法
    public User(int a,String s){
        id=a;
        name=s;

    }
     */

    //有参构造方法,,,,现在学习了this
    public User(int id,String name){
        this.id=id;
        this.name=name;
    }

    //set and get

    /**
     * 编译报错
    public void setId(int id){
        id=id;
    }
     */

    public void setId(int id){
        //等号前边的id是实例变量的id
        //等号后边的id是局部变量的id
        //这里的this不能省略
        this.id=id;
    }
}
public class UserTest {
    public static void main(String[] args){

        //调用无参构造方法
        User u1=new User();
        System.out.println(u1.getId());
        System.out.println(u1.getName());

        //调用有参构造方法
        User u2=new User(78,"詹三");
        System.out.println(u2.getId());
        System.out.println(u2.getName());
        //修改名字
        u2.setName("李四");
        System.out.println(u2.getName());
     //   System.out.println(u2.setName("lisi"));//编译报错 此处不允许使用 '空' 类型 ,,这里不能直接改直接输出

    }
}

3



//自定义的日期类型

/**
 * 1、this可以在那里???
 *      this可以采用在实例方法中,代表当前对象【语法格式:this.】
 *      this也可以使用在构造方法中,可以通过当前的构造方法调用其他的构造方法【语法格式:this(实参)】
 * 重点【记忆】:::this();这种语法只能出现在构造方法的第一行,一个构造方法只能出现一次this();
 */

public class Date {
    //属性
    private int year;
    private int month;
    private int day;

    //构造方法
    //无参构造
    /**
     * 需求:当用户调用无参构造方法的时候,默认创建日期是1970.1.1
     */
    public Date(){
        /**
         * 这段代码可以通过调用另一个构造方法来完成
         *但不能是创建新的对象
        this.year=1970;
        this.month=1;
        this.day=1;
         */
        //以下代码创建了一个全新的对象
        //new Date(1970,1,1,);

        //可以采用以下的语法来完成构造方法的调用
        //这种方式不会创建新的java对象,但可以同时达到调用别的构造方法
        //这个语句只能出现在构造方法的第一行
        this(1970,1,1);

    }

    //有参构造
    public Date(int year,int month,int day){
        this.year=year;
        this.month=month;
        this.day=day;
    }


    //setter  and  getter方法

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    //对外提供一个方法可以将无参构造方法的日期打印输出到控制台
    public void print(){
        System.out.println("日期是:"+this.year+"-"+this.month+"-"+this.day);
    }
}
public class DateTest {
    public static void main(String[] args){
        //创建日期对象1
        Date time1=new Date();
        time1.print();

        //创建日期对象2
        Date time2=new Date(2008,1,9);
        time2.print();

    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值