Java入门:Day06—类与对象

Day06—类与对象

1、类

(1)定义

对具有相同的属性(特点)和方法(行为)一类事物的描述,是抽象的、概念的。

(2)类的组成

①属性:在类中通过成员变量体现(类中方法外的变量)

②行为:在类中通过成员方法体现(去掉static关键字的方法)

   /* 
    访问修饰符 class 类名{
        成员属性:
            访问修饰符  数据类型  属性名;
        成员方法:
            访问修饰符  返回值数据类型  方法名称(参数列表){
            	方法体(程序)
                    [return]
            }
    }
*/
    public class Student{
        //成员变量(属性)
        public String name;  //成员变量
        public int age;
        //成员方法
        public void info(){
            System.out.println("张三");
        }
    }

2、static关键字

(1)类属性
static 数据类型 属性名; //用static声明的属性为类属性
(2)类属性的调用
类名称.static 属性;
    //例如:
    public class Person{
        static String country; //声明类属性
        Person.country = "B城";  //调用类属性
    }
(3)注意:
①static关键字声明的属性为全局属性(静态属性)。

②static关键字声明的属性是所有对象共享的。

③非static声明的方法可以调static声明的属性或方法,但static声明的方法不能调用非static声明的属性或方法

3、内部类

public class 外部类 {
    访问修饰符  class 内部类{
    }
}
(1)定义内部类
    public class Demo1 { //外部类
        private String name = "张三";
        public class Inner{ //内部类
            public void print(){
                System.out.println("姓名:"+name+"同学!!!");
            }
        }
        public Inner getInner(){//返回内部类对象
            return new Inner();
        }
        public static void main(String[] args) {
            Demo1 demo1 = new Demo1();
           /* Demo1.Inner inner = demo1.new Inner();
            inner.print();
    		*/
            Demo1.Inner inner = demo1.getInner();
            inner.print();
        }
    }
(2)在方法中调用内部类
    public class Demo3 {
        private  String name = "张三";
        public void info(int age){//方法
            class Inner3{ //内部类
                public void print(){ //调用
                    System.out.println("姓名:"+name);
                    System.out.println("年龄:"+age);
                }
            }
            new Inner3().print();
        }
        public static void main(String[] args) {
            Demo3 demo3 = new Demo3();
            demo3.info(20);
        }
    }
(3)使用static 声明的内部类
    public class Demo4 {
        private static String name = "张三";
        public static class Inner4{
            public void info(){
                System.out.println("name = "+ name);
            }
        }
        public static void main(String[] args) {
            //Demo4 demo4 = new Demo4();
            //demo4.new Inner4();//.info();
    
            //Inner4 inner = new Inner4();
           // Inner4.info();
            new Demo4.Inner4().info();//注意这里方法的调用
        }
    }
(4)外部类
    public class Demo2 {
        private String name = "张三";
    
        private Demo2(){//私有化
    
        }
        public String getName(){
            return this.name;
        }
        public static void main(String[] args) {
            new Inner3(new Demo2()).print();
        }
    }
    //外部类
    class Inner3{
        private Demo2 demo2 ;//= new Demo2();
        public Inner3(Demo2 demo2){
            this.demo2 = demo2;
        }
        public void print() {
            System.out.println("姓名:" + demo2.getName() + "同学!!!");
        }
    }
(5)外部访问内部类
    class OutClass1 { //外部类
    
        private String name = "张三";
    
        public class Inner1 {//内部类
    
            public void print() {
                System.out.println("姓名:" + name + "同学!!!");
            }
        }
     }
    public class Demo {
        public static void main(String[] args) {
            OutClass1 out = new OutClass1();
            OutClass1.Inner1 inner = out.new Inner1();
            inner.print();
        }
     }

4、Java中的常用内存区域

①栈内存空间:保存所有引用的堆内存空间的地址(保存所有的对象名称)

②堆内存空间:保存每个对象的具体属性内容

③全局数据区:保存static类型的属性

④全局代码区:保存所有的方法定义

5、成员变量和局部变量

区别成员变量局部变量
1、定义位置不同类中方法外方法内部或方法声明时作为形参
2、内存中位置不同堆内存(引用数据类型)栈内存(基本数据类型)
3、生命周期不同对象在而存在,对象消失而消失方法在而存在,方法消失而消失
4、初始化值不同有默认值没有默认值 ,先赋值再使用
5、作用域不同整个类可见方法内可见
6、优先级别不同小于局部变量大于成员变量
7、本类中是否可重名不可以在不同方法中可以定义相同名称的局部变量

6、对象

是真实存在的个体,是类的一个实例,实在的、真实的。对象使用前必须进行实例化操作(加载内存)。

(1)对象语法
    类名 对象名称 =  null;  声明对象
    对象名称 =  new 类名称();  //实例化对象
    
    类名 对象名称 =  new 类名称();  //加载内存
    Student s = new Student();  //例如
(2)调用属性、方法(对象)
    对象名称.变量名
        s.name
    对象名称.方法()
        s.info()

7、对象的引用传递

    public class Test{
        public static void main(String[] args){
            Person1 per1 = null; //声明per1对象
            Person1 per2 = null; //声明per2对象
            per1 = new Person(); //只实例化per1一个对象
            per2 = per1; //把per1的堆内存空间使用权给per2
            per1.name = "张三";  //设置per1对象的name属性内容
            per2.age = 28;  //设置per1对象的age属性内容
            per2.age = 35;  设置per2对象的内容,实际上就是设置per1对象的内容
        }
    }

注意:一个栈内存空间只能指向一个堆内存空间,若想再指向其他堆内存空间,必须先断开已有的指向才能分配新指向。

8、匿名对象

new Student()直接调用该对象的方法, 该对象在使用一次之后就将成为垃圾空间,等待回收。

匿名对象只在堆内存中开辟空间,而不存在栈内存的引用。

    new Student("Magic",18).info();

9、对象数组

定义:数据类型都可以来进行定义数组,用引用数据类型定义的数组,对象数组。分为动态初始化;静态初始化。

    //对象数组的声明
    //类 对象数组名称[] = new 类[数组长度];
    public class Test{
        pbulic static void main(){
            Person per[] = new Person[3];  //声明对象数组,里面有3个对象
            per[0] = new Person("张三");  //实例化第一个元素
            per[1] = new Person("李四");  //实例化第二个元素
            per[2] = new Person("王五");  //实例化第三个元素
            for(int i = 0; i < per.lenth; i++){
                System.out.println(per[i].getName() + "、");  //打印输出
            }
        }
     }

10、this关键字

(1)定义

指当前对象的引用,表示”我“ ,只能在方法中使用,哪个对象调用包含this的方法,this指定的就是该对象。

(2)作用

区分成员变量和局部变量同名的问题

(3)用法:
①在本类构造方法中访问本类成员变量,this.属性;

②在本类构造方法中调用本类其他构造方法,this(参数列表),多个构造方法互相进行调用时,应该保留一个没调用的					 多 -- 单---无 -- 多  循环

③在本类成员方法中访问本类成员变量 this.属性,访问本类成员方法 this.方法名()

④表示当前对象

注意:
在使用this调用构造方法时要注意,一定要放在构造方法的首行;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值