一、定义一个类

类名命名:大驼峰
包括:字段成员方法

class Person {//字段 -> 属性 -> 成员变量// --> 类的内部,方法的外部// 成员变量:1. 普通成员变量,2. 静态成员变量public String name = "gaobo";public int age = 18;// 一个对象存储到哪里,和被final修饰无关public final int size1 = 10; // 对象中public static final int size2 = 20; // 方法区// 成员方法// 1. 成员变量:普通成员方法,静态成员方法public void eat() {System.out.println(name+" 正在吃饭");}public void sleep() {System.out.println(name+" 正在睡觉");}
}

二、成员变量

1、怎样访问成员变量

普通成员变量的访问需要通过对象的引用
由 类 产生 对象 的过程:实例化,用new
由类Person实例化了一个对象

class Person {public String name = "gaobo";public int age = 18;public void eat() {System.out.println(name+" 正在吃饭");}public void sleep() {System.out.println(name+" 正在睡觉");}
}public class TestDemo {public static void main(String[] args) {// 由类定义的变量:引用变量Person person1 = null;Person person2 = new Person();}
}

2、局部变量,成员变量

  • 局部变量没有赋初值,打印报错
  • 成员变量如果没有赋值,打印的name是null,而age是0

成员变量没有赋初值的默认值:

 *                         整数   byte short int long(默认值:0)*                         浮点数 float double(默认值:0.0)*          基本数据类型     字符   char(默认值:'\u0000')*                         布尔   boolean(默认值:false)* 数据类型*          引用类型        String  数组 类 接口 枚举……(默认值:null)*

以下打印null:

class Person {public String name;public int age;public void eat() {System.out.println(name+" 正在吃饭");}public void sleep() {System.out.println(name+" 正在睡觉");}
}public class TestDemo {public static void main(String[] args) {Person person = new Person();System.out.println(person.name);}
}

3、每个对象都有 name age

class Person {public String name;public int age;public void eat() {System.out.println(name+" 正在吃饭");}public void sleep() {System.out.println(name+" 正在睡觉");}
}public class TestDemo {public static void main(String[] args) {Person person = new Person();person.name = "bit";person.age = 10;System.out.println(person.name); // bitSystem.out.println(person.age); // 10System.out.println("=======================");Person person2 = new Person();System.out.println(person2.name); // nullSystem.out.println(person2.age); // 0}
}


三、成员方法

1、成员方法的访问

class Person {public String name;public int age;public void eat() {System.out.println(name+" 正在吃饭");}public void sleep() {System.out.println(name+" 正在睡觉");}
}public class TestDemo {public static void main(String[] args) {Person person = new Person();person.eat(); // gaobo 正在吃饭person.sleep(); // gaobo 正在睡觉}
}

四、静态成员

字段-属性-成员变量:
1.普通成员变量
2.静态成员变量 --> 类名.静态的成员属性/方法

class Person {//  普通的成员变量 -都是属于对象的public String name; // 实例变量 存放在对象内public int age;// 静态成员变量 -类变量 -> 方法区public static int count;public void eat() {System.out.println(name+"正在吃饭!");}public void sleep() {System.out.println(name+"正在睡觉!");}
}

1、方法区

class Person {public String name; public int age;// 静态成员变量 -类变量 -> 方法区public static int count;
}    public class TestDemo {public static void main3(String[] args) {Person person1 = new Person();person1.count++;System.out.println(Person.count); // 1System.out.println("===================");Person person2 = new Person();person2.count++;System.out.println(Person.count); // 2}public static void main2(String[] args) {Person person1 = new Person();person1.age++;System.out.println(person1.age); // 1System.out.println("===================");Person person2 = new Person();person2.age++;System.out.println(person2.age); // 1}public static void main1(String[] args) {Person person = new Person();person.count = 1999;System.out.println(person.count); // 1999}
}


2、访问静态成员变量

class Person {public String name; public int age;// 静态成员变量 -类变量 -> 方法区public static int count;
}    public class TestDemo {public static void main(String[] args) {/*Person person1 = new Person();person1.count++;*/// 通过类名访问静态成员变量// 类名.静态的成员属性/方法// 不需要new两个对象 节省了2个对象的空间Person.count++;System.out.println(Person.count); // 1System.out.println("===================");/*Person person2 = new Person();person2.count++;*/Person.count++;System.out.println(Person.count); // 2// 方法区}
}

2、访问静态方法:直接用类名

class Person {public void eat() {System.out.println(name+" 正在吃饭");}// 类方法/静态方法public static void staticFunc() {System.out.println("static::func()");}
}    public class TestDemo {public static void main(String[] args) {// 访问静态方法:直接用类名Person.staticFunc();// 需要引用指向对象Person p = new Person();p.eat();}
}

3、注意事宜

① 普通的方法内部,不能定义静态的变量

  1. static 定义的变量,是类变量,属于类
  2. eat方法的调用,需要对应的引用来调用,但是如果可以定义static的变量,类名Person就可以调用
class Person1 {public String name;public int age;public static int count;public void eat() {// static int size = 0; // errSystem.out.println(name+"正在吃饭!");}
}public class TestPerson {public static void main(String[] args) {}
}

② 静态的成员变量,是不可以在方法中定义的

class Person1 {public String name;public int age;public static int count;// 类方法/静态方法public static void staticFunc1() {// static int size = 0; // errcount = 1; // 可以赋值静态成员变量}
}public class TestPerson {public static void main(String[] args) {}
}

③ 普通方法内部,可以调用静态的方法

class Person {public String name;public int age;public static int count;public void sleep() {// 普通方法依赖于对象,静态方法不依赖对象staticFunc();System.out.println(name+"正在睡觉!");}// 类方法/静态方法public static void staticFunc() {System.out.println("static::func()");}
}public class TestPerson {public static void main(String[] args) {Person person = new Person();p.sleep();}
}

④ 静态方法内部,不能调用普通方法

class Person1 {public String name;public int age;public static int count;public void sleep() {System.out.println(name+"正在睡觉!");}// 类方法/静态方法public static void staticFunc() {// 通过类名就可以调用静态方法,而普通方法需要对象// sleep(); // errSystem.out.println("static::func()");}
}public class TestPerson {public static void main(String[] args) {}
}

例1:

public class TestPerson {public static void func1() {}public void func2() {}public class TestDemo {public static void main(String[] args) {func1(); // ok// func2(); // err 普通成员方法需要对象TestDemo testDemo = new TestDemo();testDemo.func2(); // ok}
}

main函数为什么是静态的

main是不是静态的都可以,取决于JVM如何实现的


例2:

class Test{public int a;public static int count;
}public class Main{public static void main(String[] args) {Test t1 = new Test();t1.a++; // 1Test.count++; // 1System.out.println(t1.a); // 1System.out.println(Test.count); // 1System.out.println("============");Test t2 = new Test();t2.a++; // 1Test.count++; // 2System.out.println(t2.a); // 1System.out.println(Test.count); // 2}}


五、引用

1、null

public class TestDemo {    public static void main(String[] args) {Person person = null; // 此引用不指向任何对象}
}

2、该引用指向?

public class TestDemo {    public static void main(String[] args) {Person person = new Person();Person person1 = person; // person1这个引用指向person这个引用所指向的对象}
}

3、一个引用能否同时指向多个对象?

public class TestDemo {    public static void main(String[] args) {// 一个引用不能同时指向多个对象Person person = new Person();person = new Person();person = new Person();person = new Person();person = new Person(); // 最后一次}
}

4、引用一定在栈上吗?

不一定

public class TestDemo {    // 成员变量Person person = new Person();public static void main(String[] args) {TestDemo testDemo = new TestDemo();Person person = new Person();}
}


JavaSE04、什么是类和对象,如何使用?相关推荐

  1. C++ 笔记(18)— 类和对象(this 指针、指向类的指针、类静态成员变量和函数)

    1. this 指针 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址. this 指针是所有成员函数的隐含参数.因此,在成员函数内部,它可以用来指向调用对象. 友元函数没有 thi ...

  2. C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)

    1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...

  3. C02-程序设计基础提高班(C++)第9周上机任务-类和对象

    第9周:阅读教材第8章(p231-262),主要内容是类和对象,学会定义类和对象解决问题,完成第9周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) 实践任务: [任务1]阅读.运行下 ...

  4. 函数返回类的对象与拷贝构造函数

    C++中,如果我们在一个函数中,定义了一个类的对象,然后返回这个对象,在main函数中用一个对象去接受这个返回的对象的时候,这里面参与的函数调用大家可能不熟悉,这里通过程序和注释的方式给大家讲解一下. ...

  5. ZJU-java进阶笔记 第一、二周(类与对象,对象交互)

    对象变量是对象的管理者,而非所有者 VendingMachine vm = new VendingMachine(); this指代当前对象 成员函数可以直接(不需要点运算符)调用本类的其他成员函数 ...

  6. 3个题目熟悉类和对象基础

    1.按要求编写Java应用程序: (1)编写西游记人物类(XiYouJiRenWu)其中属性有:身高(height),名字(name),武器(weapon)方法有:显示名字(printName),显示 ...

  7. 刻意练习:Python基础 -- Task10. 类与对象

    背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...

  8. java中具有继承关系的类及其对象初始化顺序

    先说结论 对于具有继承关系的类,它们的类和对象构造顺序为:父类的类构造器() -> 子类的类构造器() -> 父类成员变量的赋值和实例代码块 -> 父类的构造函数 -> 子类成 ...

  9. python的类和对象_Python类与对象实验

    一.任务描述 本实验任务主要对Python类与对象进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python类与对象的关系,并对Python类与对象的基本操作进行整理并填写工作任务报告. 二. ...

最新文章

  1. 各大视觉技术看透女神吗
  2. 实习的第一天——培训
  3. 微信推出“腾讯QQ”小程序;马化腾又要发红包;GitLab 12.5 稳定版发布| 极客头条...
  4. 一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-在UI中应用DataUIMapper组件...
  5. 如何选择VC界面库产品
  6. python中merge函数_Python Merge函数原理及用法解析
  7. win10彻底禁用chrome自动升级方法
  8. 联想服务器改xp系统,联想win7改xp蓝屏怎么解决
  9. mpchart点击_在MPAndroidChart中,如何为Barchart中的每个Bar添加click事件?
  10. cst和ansys_CST、HFSS、ADS几款电磁仿真软件区别对比
  11. vue 自动播放视频
  12. DNS的集群与更新(远程更新,加密更新)
  13. Python编程小记:基本语法
  14. abap 在屏幕如何调用选择屏幕以及如何获得选择屏幕的操作
  15. Unity项目优化-Alpha通道分离
  16. Websphere远程代码执行-CVE-2015-7450
  17. 202203读书-《 测试有道:微软测试技术心得》
  18. 开发日志:浏览器宽度大于400px,td的宽度按百分比自适应,小于400px时,宽度为指定的值
  19. android三星note20.6,三星Galaxy Note 20 Ultra依旧是“安卓机皇”,用过的都说好
  20. C# 关于WinForm界面在触摸屏上显示点触型按钮会引发右键导航栏功能

热门文章

  1. javabean更新到mysql_javabean连mysql 数据库更新问题
  2. windows 安装tomcat 7
  3. [转]如何使用WinPE硬盘安装Windows XP
  4. 广州.Net俱乐部第二次聚会报道
  5. Ubuntu 终端不能输入中文,不能显示中文的解决办法
  6. 方法的形式参数是类名的时候如何调用
  7. Oracle parameter中常用参数收集:
  8. 雷林鹏分享:Lua 面向对象
  9. SPOJ QTREE
  10. springcould结合springbboot微服务 开发@^——^@ 模式讲解