Java 类与对象全解析

原创 2018年01月08日 19:57:41

如何创建对象和如何书写一个类?

代码举例:

public class Demo01 {
    public static void main(String[] args) {
        //实例化一个对象 名字为 animal
        Animal animal = new Animal();       
        //如何访问成员变量?  对象.变量  对象创建在堆内存有初始值 
        //如果成员变量在 = 前面叫赋值 如果在等号后面叫获取
        animal.name = "来福";
        //获取成员变量
        System.out.println(animal.name);        
        //调用方法
        animal.sayHi();
        animal.sleep();
        animal.eat();       
    }
}
//  创建一个动物类
    class Animal{
        //成员变量的作用域 整个类中都能访问到
        String name = "旺财"; //动物的姓名
        int age = 2;        //动物的年龄
        String gender = "公";        //性别        
        //成员方法 
        public void sayHi() {
            System.out.println("名字:" + name);
            System.out.println(age +"岁");
            System.out.println("性别:" + gender);
        }
        //睡觉
        public void sleep() {
            String name = "小强";      //局部变量
            System.out.println(name + "在睡觉");
        }
        //吃饭
        public void eat() {
            System.out.println(name + "在吃饭");
        }
    } 

上面我们具体代码举例了写一个类和如何示例一个类.在代码中有引入了 成员变量和局部变量概念 它们具体有什么区别呢?

  1. 书写位置
    成员变量:在类中方法外
    局部变量:在类中方法内或方法声明上

  2. 内存位置
    成员变量:在堆内存中
    局部变量:在栈内存中

  3. .初值
    成员变量:有默认值(堆赋予的)
    局部变量:无默认值 如果要使用 必须要给初值

  4. 生命周期
    成员变量: 随着对象的创建而创建 随着对象的销毁而销毁
    局部变量: 随着方法存在

有些时候一些方法需要传参,那就创建这个参数传进去 当参数为引用数据类型(类) 需要创建这个对象 然后将它传进去(传入的为内存地址!)

代码举例:

public class Demo03 {

    public static void main(String[] args) {
        //匿名对象 new Person()
        //只调用方法 这时可以使用匿名对象(测试的时候会用)
        //可以当做参数进行传递
        //好处:当参数的时候 代码简单    坏处:无法直接修改里面的值   
        new Person().name ="james";
        new Person().sayHi();           
        Person p1 = fun("Tom", new Person());
        p1.sayHi();
    }
    //封装一个更改name的方法
    public static Person fun(String name) {
        Person person = new Person();
        person.name = name;
        person.sayHi();  
         return person;

     }
    //函数的重载  功能同上    Person person 实际上和  Person person = new Person() 相同的
    public static Person fun(String name, Person person) {
    // = 后面的为传入参数name 右边的为Person类中的name 和第一个封装方法一样
        person.name = name;
        return person;  
    }
}
//创建一个类
 class Person{
     String name = "peter";
     int age = 16;  
     //方法 
     public void sayHi() {
         System.out.println("姓名:" + name + " " + "年龄:" + age);       
     }   
 } 

从上面我们可以看出 类中的属性 好像只要实例化谁都可以拿来取值赋值 能不能避免这样呢?
当然可以,只需要在属性前面加一个关键字就可以了 —private 私有的
我们来看看代码中是如何实现的

public class Dmoe04 {
    public static void main(String[] args) {
        Student student = new Student();
        //使用 set/get 方法
        student.setName("jamea"); 
        student.setAge(18); 
        System.out.println(student.getName());
        student.sayHi();
    }
}
    //创建类
    class Student{
        // 成员变量私有化(只能本类进行访问 本类以外无法访问)
        //不能通过对象点属性来直接访问 但是可以通过方法来间接访问
    private String name;
    private int age;    
    //  get/set方法 命名规范 以set /get 开头 小驼峰
    //获取
        public String getName() {
        return name;
    }
    //修改
    public void setName(String name) {
        //提供关键字 this 代表本类的对象
        // 哪个对象调用方法 这个对象就是this
            this.name = name;    
            //这里 = 右边的name 是传入的参数 左边的相当于 student.name
            //this 用来区分两个name
    }


    public int getAge() {
        return age;
    }


    public void setAge(int age) {
        this.age = age;
    }
        // 就近原则(这里会打印局部变量) 
        public void sayHi() {
            String name = "猜猜我是谁?";
            System.out.println(name + " " + age);

        }
    } 

Java类和对象 详解(二)

上一篇Java类和对象 详解(一)讲解了类和对象的基本概念,定义和使用,以及对象引用传递的初步分析,下面接着来讲其他内容。一、面向对象的封装性封装(encapsulation)又叫隐藏实现(Hidin...
  • wei_zhi
  • wei_zhi
  • 2016年10月07日 17:52
  • 2278

Java类和对象 详解(一)

一、面向对象简述面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面向...
  • wei_zhi
  • wei_zhi
  • 2016年10月06日 20:48
  • 17335

java 类和对象的理解

对象和类的定义 重载 class father { public void get() { System.out.println("father"); } } ...
  • qq_26296197
  • qq_26296197
  • 2016年09月01日 08:08
  • 1296

Java反射获取类和对象信息全解析

反射可以解决在编译时无法预知对象和类是属于那个类的,要根据程序运行时的信息才能知道该对象和类的信息的问题。在两个人协作开发时,你只要知道对方的类名就可以进行初步的开发了。获取类对象Class.forN...
  • play_chess_ITmanito
  • play_chess_ITmanito
  • 2016年07月02日 18:59
  • 261

Java反射获取类和对象信息全解析

反射可以解决在编译时无法预知对象和类是属于那个类的,要根据程序运行时的信息才能知道该对象和类的信息的问题。 在两个人协作开发时,你只要知道对方的类名就可以进行初步的开发了。 获取类对象 ...
  • wenzhong003
  • wenzhong003
  • 2016年06月08日 23:15
  • 109

Java反射获取类和对象信息全解析

反射可以解决在编译时无法预知对象和类是属于那个类的,要根据程序运行时的信息才能知道该对象和类的信息的问题。 在两个人协作开发时,你只要知道对方的类名就可以进行初步的开发了。...
  • javaniuniu
  • javaniuniu
  • 2016年06月15日 10:51
  • 2108

百度天气api开发 全解析xml和json格式 使用json-lib jsonObject、 Gson 方式把json 转换成 java对象

首先你必须有一个百度的,访问应用(AK) ,否则就别往下读了 申请地址:http://lbsyun.baidu.com/apiconsole/key 注意: 写在前面-- java的类文件必须是ut...
  • linhuchong_blog
  • linhuchong_blog
  • 2015年03月05日 16:34
  • 1442

第一天:Java源码级实战速成(通过动手实战类、对象等,通过Spark和Hadoop案例代码和源码解析具体指知识的应用、深度详解匿名接口在Spark开发中的运用)

call回调   /**    *  Return a new RDD by first applying a function to all elements of this    *  RD...
  • duan_zhihua
  • duan_zhihua
  • 2016年04月10日 09:50
  • 447

Java对象锁和类锁全面解析(多线程synchronized关键字)

原文:http://blog.csdn.net/u013142781 最近工作有用到一些多线程的东西,之前吧,有用到synchronized同步块,不过是别人怎么用就跟着用,并没有搞清楚锁的...
  • cg_Amaz1ng
  • cg_Amaz1ng
  • 2017年04月26日 18:07
  • 183

解析 Java 类和对象的初始化过程

简介: 类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM...
  • dww410
  • dww410
  • 2011年05月31日 11:36
  • 535
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java 类与对象全解析
举报原因:
原因补充:

(最多只允许输入30个字)