import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
public class TestDemo {
public static void main(String[] args) {
Person person = new Person(); // person变量(引用)存储对象的地址
person.name = "bit";
person.age = 99;
System.out.println(person.name);
System.out.println(person.age);
person.eat();
person.print();
// 静态变量
// count不在对象里
// 不需要对象访问
person.count = 1999;
System.out.println(person.count);// 1999
Person person2 = new Person();
System.out.println(person2.count);// 1999
System.out.println(person.age);// 99
System.out.println(person2.age);// 0
System.out.println(Person.count);// 不报警告
Person.staticFunc();// 静态方法
}
// 重写
public static void main(String[] args) {
Person person = new Person();
person.name = "zc";
person.age = 21;
System.out.println(person);
}
// 封装
public static void main(String[] args) {
Person person = new Person();
person.setName("bit");
System.out.println(person.getName());
person.setAge(10);
System.out.println(person.getAge());
}
// 构造方法
// 就是new Person()
// 之间可以构成重载
public static void main(String[] args) {
Person person = new Person(); // 调用了不带参数的构造方法
Person person1 = new Person("zc");
Person person2 = new Person("zc",10);
}
// 实例代码块
public static void main(String[] args) {
Person person = new Person();
// 静态代码块 (只执行一次)类加载的时候
// 实例代码块
// 构造方法
}
// 匿名对象
public static void main(String[] args) {
new Person().eat();
new Person().print();
System.out.println(new Person());
// 一次性的
}
}
// 什么是类?什么是对象?
class Person {
// 字段(属性)(成员)
// 普通成员变量 静态成员变量
public String name;
public int age;
// 静态成员变量-》类变量:放到方法区
// 方法区:1.存储代码的片段 2.静态变量
// static 不能在方法里定义
public static int count;
public void eat() {
// static int size = 0;// 不支持普通方法内部定义静态变量
System.out.println(name+"正在吃饭");
// print(); // 普通方法可以调用普通方法(有对象)
}
public void print() {
staticFunc();// 普通方法里可以调用静态方法
System.out.println("姓名"+name+" 年龄"+age);
}
public static void staticFunc() {
// static int size = 0;// 静态方法里也不行 静态是属于类的
System.out.println("staticFunc()");
// print(); // 静态方法不能调用普通方法(没有对象)
// 静态方法不依赖对象
}
// 重写
@Override
public String toString() {
return "Person{" +
"name='" + name + ''' +
", age=" + age +
'}';
}
}
main函数 为什么是静态的
首先main函数是不是静态的都可以,这个东西取决与JVM,JVM设计时规定main函数必须是static
引用一定是在栈上吗?不一定
class Person {
// 封装:private
// 只能在当前类中使用
// 提供set和get方法(接口)
private static String name;
private static int age;
public void setName(String myName) {
name = myName;
}
public String getName() {
return name;
}
private void print() {
System.out.println(name);
}
public void setAeg(int age) {
// age = age X 局部变量提前使用
this.age = age; // this.:当前类
}
public int getAge() {
return age;
}
}
// 自动生成get和set
// generate
class Person {
private static String name;
private static int age;
public static String getName() {
return name;
}
public static void setName(String name) {
Person.name = name;
}
public static int getAge() {
return age;
}
public static void setAge(int age) {
Person.age = age;
}
}
// 构造方法:方法名和类名相同。构造方法比较特殊 没有返回值
// 构造方法是干嘛的?
// 1.为对象分配内存
// 2.调用合适的构造方法
// 类肯定有构造方法
class Person {
public static String name;
private static int age;
public Person() {
System.out.println("Person()::不带参数的构造方法");
}
public Person(String name) {
Person.name = name;
System.out.println("Person(String): :带一个Sting类型发参数的构造方法");
}
public Person(String name,int age) {
Person.name = name;
Person.age = age;
System.out.println("Person(String): :带两个参数的构造方法");
}
}
// this和super有什么区别
// this.data 调用当前对象的属性
// this.func() 调用当前对象的方法
// this() 调用当前对象的其他构造方法
// 实例代码块
// 代码块怎么调用?
class Person{
private String name;
private int age;
private static int count;
{
this.age = 10;
System.out.println("实例代码块");
}
static {
count = 99;
System.out.println("静态代码块");
}
public Person() {
System.out.println("Person()::不带参数的构造方法");
}
}



