如何创建对象和如何书写一个类?
代码举例:
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 + "在吃饭");
}
}
上面我们具体代码举例了写一个类和如何示例一个类.在代码中有引入了 成员变量和局部变量概念 它们具体有什么区别呢?
书写位置
成员变量:在类中方法外
局部变量:在类中方法内或方法声明上内存位置
成员变量:在堆内存中
局部变量:在栈内存中.初值
成员变量:有默认值(堆赋予的)
局部变量:无默认值 如果要使用 必须要给初值- 生命周期
成员变量: 随着对象的创建而创建 随着对象的销毁而销毁
局部变量: 随着方法存在
有些时候一些方法需要传参,那就创建这个参数传进去 当参数为引用数据类型(类) 需要创建这个对象 然后将它传进去(传入的为内存地址!)
代码举例:
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);
}
}