Java中的类和对象
Java中的类
Java中的类
如何写一个类?
使用class修饰
注意:一个文件中只允许有一个public修饰的类
类 里面 都有什么?
对类的描述(属性 和 行为)
属性: 一般都是用 名词 来修饰
行为: 一般都是用 动词来修饰
类中的写:
成员变量(实例变量) 写在 类中 方法外
成员方法(实例方法) 写在 类中
类的写法:
class 类名 {
}
注意: 类名遵循大驼峰写法
例如:
//创建一个动物类 有姓名 年龄 性别 品种 会介绍自己
class Animal {
String name = "十八";//名字
int age = 2; //年龄
String gender = "公";//性别
String kind = "金毛";//品种
public void sayHi(){
System.out.println("姓名: " + name);
System.out.println("年龄: " + age);
System.out.println("性别: " + sex);
System.out.println("品种: " + kind);
}
public void sleep() {
System.out.println(name + "睡觉");
}
public void eat() {
System.out.println(name + "吃饭");
}
}
注意
一个包中 类的名字不能相同
Java中的对象
如何创建对象?
类名 对象名 = new 类名();
例如:(这里的类,还是上面的那个类)
public static void main(String[] args){
//创建一个对象
Animal dog = new Animal();
//访问成员变量: 对象.成员变量
//如果成员变量在等号前面 叫赋值
//如果dog.name 在 等号 后面 叫做获取
//赋值
dog.name = "八公";
//获取
String stringName = dog.name;
System.out.println(stringName);//打印获取的值
//因为 dog.name = "八公"; 这一行代码已经把"八公"赋值给了dog.name
//所以 下面获取的时候 就是获取 "八公"
//打印的也是"八公"
// 调用成员方法
dog.sayHi();
dog.eat();
dog.sleep();
}
class Animal {
String name = "十八";//名字
int age = 2; //年龄
String gender = "公";//性别
String kind = "金毛";//品种
public void sayHi(){
System.out.println("姓名: " + name);
System.out.println("年龄: " + age);
System.out.println("性别: " + sex);
System.out.println("品种: " + kind);
}
public void sleep() {
System.out.println(name + "睡觉");
}
public void eat() {
System.out.println(name + "吃饭");
}
}
成员变量和局部变量
成员变量和局部变量的区别:
1. 书写位置
成员变量:类中 方法外
局部变量:方法中 或 方法声明上
2. 内存中的位置
成员变量:存在于堆内存
局部变量:加载到栈内存
3. 初值
成员变量:有默认初始值(堆给的)
局部变量:没有默认值 如果要使用的话 必须要给初值
4. 生命周期
成员变量:随着对象的创建而创建 随着对象的销毁而销毁
局部变量:随着方法存在
例子:
// 创建一个红色法拉利 5个轮子
public static main(String[] args){
Car car = new car();
Car.brand = "法拉利";
Car.tiresNum = 5;
//介绍自己的方法
car.introduce();
}
class Car{
String color;//颜色
String brand;//牌子
int tiresNum;
public void hitMan(){
System.out.println("会撞人")
}
public void move(){
System.out.println("会动")
}
public void introduce(){
System.out.println("我的颜色是: " + color);
}
System.out.println("我的牌子是: " + brand);
System.out.println("我有" + tiresNum + "个轮胎")
}
//方法 需要什么参数 就创建什么参数
//当参数为 引用数据类型时
//你需要创建出这个对象 然后将地址传进去
public static void main(String[] args) {
Person p = new Person();
Person person1 = fun("吴彦祖", p);
person1.introduce();
}
class Person{
String name = "吴彦祖";
int age = 28;
public void introduce() {
System.out.println("我叫: " + name);
System.out.println("我今年" + age + "岁");
}
}
//匿名对象:没有名字的对象
1. 如果你知调用方法的话 这时可以使用匿名对象(测试的时候会用)
2. 匿名对象可以当做参数进行传递
好处: 当参数时 代码简便
弊端: 无法直接修改里面的值
public static void main(String[] args) {
new Person().introduce();
new Person().name = "苏";
new Person().introduce();
Person p1 = fun("吴彦祖", new Person());
}
public static Person fun(String name) {
Person person = new Person();
person.name = name;
person.introduce();
return person;
}
public static Person fun(String name, Person person) {
person.name = name;
return person;
}
}
class Person{
String name = "吴彦祖";
int age = 28;
public void introduce() {
System.out.println("我叫: " + name);
System.out.println("我今年" + age + "岁");
}
}
面向对象
面向对象的特征
1.封装
2.继承
3.多态
封装
封装:将类中的属性或方法对外界隐藏 然后提供公共的访问方式
例如:
public static void main(String[] args) {
Student student = new Student();
}
class Student{
// 成员变量私有化(只能本类进行访问 本类以外无法访问)
// 不能通过对象点属性来直接访问 但是 可以通过方法来间接访问
//private 私有(权限修饰符)
private String name;
private int age;
//间接方法来访问:
public static void main(String[] args) {
Student student = new Student();
//使用 set/get 方法
student.setName("苏茜孟");
student.setAge(21);
System.out.println(student.getName() + " " + student.getAge());
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;
}
//获取
public int getAge() {
return age;
}
//修改
public void setAge(int a) {
age = a;
}
// 就近原则(这里会打印局部变量)
public void sayHi() {
String name = "?";//像这里 就是会打印出"?" 因为这里定义的 name 和类中定义的 name 名字一样 而且这里进 所以打印 这里定义的 name
System.out.println(name + " " + age);
}
Day.8