入门案例:声明一个人类
package com.baidu.a_class;
//声明一个人类
public class Person {
String name;//名字
int age;//年龄
double height;//身高
char sex;//性别
//吃
public void eat () {
System.out.println("我要吃饭了");
}
//睡觉
public void sleep() {
System.out.println("我要睡觉了");
}
}
案例:声明一个狗类
package com.baidu.a_class;
//单纯声明一个狗类
public class Dog {
String name;//名字
String kind;//品种
String color;//颜色
//看家
public void lookHome() {
System.out.println("我会看家");
}
//打架
public void fight() {
System.out.println("我会打架");
}
}
对象
对象创建语法格式
类名 对象名 = new 类名();
package com.baidu.a_class;
//测试类
public class Demo1 {
public static void main(String[] args) {
//创建person1这个对象
Person person1 = new Person();
//赋值
person1.name = "小红";
person1.age = 20;
person1.height = 120;
person1.sex = '女';
System.out.println(person1.name + person1.age +person1.sex + person1.height);
person1.eat();
person1.sleep();
//创建person2这个对象
Person person2 = new Person();
//赋值
person2.name = "小明";
person2.age = 18;
person2.sex = '男';
person2.height = 130;
System.out.println(person2.name + person2.age + person2.sex + person2.height);
person2.eat();
person2.sleep();
}
}
实体类与测试类写在同一个文件夹下
注意:
1.当实体类与测试类写在同一个文件夹下时,文件夹的类名
是以测试类为命名
2.同一个文件夹下只能有一个public修饰符
3.开发中实体类和测试类是要分开写的
构造方法
构造方法的目的是为了初始化对象的,换句话说,可以对对象的属性进行赋值
对象创建其实是依据构造方法创建的!!!【重点】
当你创建一个对象时候,构造方法会自动调用。
无参构造方法
语法格式
public 类名() { }
package com.baidu.b_constructor;
//人类
public class Person {
String name;
int age;
//构造方法
public Person() {
//赋值
this.name = "小明";
this.age = 18;
}
}
有参构造方法
语法格式
public 类名(参数) { 初始化条件; }
案例:
package com.baidu.a_class;
class Cat {
String name;
String kind;
int age;
public Cat() {
}
//和下面的有参构造一模一样!!!
// public Cat (String kind) {
// this.kind = kind;
// }
//声明一个有参构造方法
public Cat (String name) {
this.name = name;
}
//带有三个参数 构造方法
public Cat (String name, String kind, int age) {
this.name = name;
this.age = age;
this.kind = kind;
}
}
public class Demo3 {
public static void main(String[] args) {
Cat cat = new Cat("狗蛋");
System.out.println(cat.name);
//new对象的时候依据构造方法来创建对象
Cat cat1 = new Cat("毛蛋", "波斯", 3);
System.out.println(cat1.name);
System.out.println(cat1.age);
System.out.println(cat1.kind);
//一旦写了有参构造方法以后,默认的无参构造方法就没有了
Cat cat2 = new Cat();
cat2.name = "Tom";
cat2.age = 4;
cat2.kind = "蓝猫";
}
}
对象的内存分析
2.png
构造代码块(了解)
开发中已经不用了
以后会讲静态代码块。
构造代码块的目的也可以对咱们的对象进行初始化的。功能和构造方法一样的
语法格式:
{ 语句体 }
注意事项:
1.构造代码块必须写在实体类中
2.创建对象的时候,先执行的是构造代码块,再执行构造方法,和顺序没有关系
package com.qfedu.b_constructor;
class Tiger {
String name;
int age;
//再声明一个构造方法
public Tiger () {
this.name = "haha";
System.out.println("我是无参构造方法");
}
//先写一个构造代码块
{
this.name = "嘻嘻";
System.out.println("我是构造代码块");
}
}
public class Demo5 {
public static void main(String[] args) {
//先执行实体类中构造代码块 然后再执行构造方法
Tiger tiger = new Tiger();
System.out.println(tiger.name);
}
}
9.局部变量和成员变量
9.1局部变量
局部变量就是变量的作用域,其实是已经见过局部变量
package com.qfedu.c_var;
import org.omg.CORBA.PUBLIC_MEMBER;
public class Demo1 {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
//上面的i就是for循环的局部变量,出了for循环不能用
//紧紧围绕着一个东西就是那个大括号
System.out.println(i);
}
//System.out.println(i);
if (3 < 4) {
int i = 98;
}
}
public static void test () {
int i = 20;
System.out.println(i);
}
public static void test1 () {
//System.out.println(i);
}
//总结一下: 一定要看清大括号里面的那个变量只能在大括号里面来使用的
}
9.2成员变量
定义在实体类中的大括号的后面,又叫属性
String name;
int age;
package com.qfedu.c_var;
class Person {
//name 和 age都是成员变量
String name;
int age;
//作用域 是作用再整个类中 的,只要在类中都可以使用当前的成员变量
public void eat () {
double weigt;//局部的变量
System.out.println(name + age);
}
}
public class Demo2 {
public static void main(String[] args) {
}
}
9.3局部和成员变量的区别
区别 | 成员变量 | 局部变量 |
---|---|---|
定义的位置 | 类的大括号的后面(属性) | 定义在方法体中 |
作用 | 用来描述对象的特征的 | 在方法体中只是用来存储数据的 |
初始化的值 | 默认值 | 在使用的时候必须赋值 |
内存 | 堆区 | 栈区 |
作用域 | 作用整个类 | 只能在当前的方法中使用 |