/*
* 一、Java面向对象学习的三条主线:、
* 1.Java类及类成员:属性、方法、构造器;代码块、内部类
* 2.面向对象三大特征:封装、继承、多态、抽象
* 3.其它关键字:this、super、static、final、abstract、interface、package、import
*
* 二、面向对象的两个要素
* 类:对一类事物的描述,是抽象的、概念上的定义
* 对象:是实际存在的该类事物的每个个体,因而也称为实例
* 面向对象程序设计的重点是类的设计
* 设计类,就是设计类的成员
*
* JVM内存结构
* 编译完源程序以后,生成一个或多个字节码文件
* 我们使用JVM中的类的加载器和解释器对生成的字节码文件进行解释运行。
* 意味着,需要将字节码文件对应的类加载到内存中,涉及到内存解析
*
* 虚拟机栈:我们将局部变量存储在栈结构中
* 堆:我们将new出来的结构(比如:数组、对象)加载在堆空间中。
* 对象的属性(非static的)加载在堆空间中
* 方法区:类的加载器、常量池、静态域
*
*/
********************************************************************************************************************************
package com.atguigu.java;
/*
* 一、设计类,就是设计类的成员
* 属性 = 成员变量 = field = 域,字段
* 方法 = 成员方法 = 函数 = method
*
* 创建类的对象 = 类的实例化 = 实例化类
*
* 二、类和对象的使用(面向对象思想落地的实现)
* 1.创建类、设计类的成员
* 2.创建类的对象
* 3.通过“对象.属性”或“对象.方法”调用对象结构
*
* 三、如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性(非static的)
* 意味着:如果我们修改一个对象的属性a,则不影响另外一个对象属性a的值
*/
public class PersonTest {
public static void main(String[] args) {
//2.创建Person类的对象
Person p1 = new Person();
//Scanner scan = new Scanner(System.in)
//调用对象的结构:属性、方法
//调用属性:“对象.属性”
p1.name = "Tom";
p1.isMale = true;
System.out.println(p1.name);
//调用方法:“对象.方法”
p1.eat();
p1.sleep();
p1.talk("chinese");
Person p2 = new Person();
System.out.println(p2.name);
System.out.println(p2.isMale);
Person p3 = p1;
System.out.println(p3.name);//Tom
p3.age = 10;
System.out.println(p1.age);//10
}
/*
* 一、设计类,就是设计类的成员
* 属性 = 成员变量 = field = 域,字段
* 方法 = 成员方法 = 函数 = method
*
* 创建类的对象 = 类的实例化 = 实例化类
*
* 二、类和对象的使用(面向对象思想落地的实现)
* 1.创建类、设计类的成员
* 2.创建类的对象
* 3.通过“对象.属性”或“对象.方法”调用对象结构
*
* 三、如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性(非static的)
* 意味着:如果我们修改一个对象的属性a,则不影响另外一个对象属性a的值
*/
public class PersonTest {
public static void main(String[] args) {
//2.创建Person类的对象
Person p1 = new Person();
//Scanner scan = new Scanner(System.in)
//调用对象的结构:属性、方法
//调用属性:“对象.属性”
p1.name = "Tom";
p1.isMale = true;
System.out.println(p1.name);
//调用方法:“对象.方法”
p1.eat();
p1.sleep();
p1.talk("chinese");
Person p2 = new Person();
System.out.println(p2.name);
System.out.println(p2.isMale);
Person p3 = p1;
System.out.println(p3.name);//Tom
p3.age = 10;
System.out.println(p1.age);//10
}
}
class Person{
//属性
String name;
int age = 1;
boolean isMale;
//方法
public void eat() {
System.out.println("人可以吃");
}
public void sleep() {
System.out.println("人可以睡觉");
}
public void talk(String language) {
System.out.println("人可以说"+language);
}
}
//属性
String name;
int age = 1;
boolean isMale;
//方法
public void eat() {
System.out.println("人可以吃");
}
public void sleep() {
System.out.println("人可以睡觉");
}
public void talk(String language) {
System.out.println("人可以说"+language);
}
}
************************************************************************************************************************************
package com.atguigu.java;
/*
* 类中属性的使用
*
* 属性(成员变量) 局部变量
* 1.相同点
* ①定义变量的格式:数据类型 变量名 = 变量值
* ②先声明后使用
* ③变量都有其对应的作用域
*
* 2.不同点
* ①在类中声明的位置的不同
* 属性:直接定义在类的一对{}内
* 局部变量:生命在方法内、方法形参、代码块内、构造器形参、构造器内的变量
*
* ②关于权限修饰符的不同
* 属性 :可以在声明属性时,指明其权限,使用权限修饰符
* 常用的权限修饰符:private、public、缺省、protected
*
* 局部变量:不可以使用权限修饰符
*
* ③默认初始化值
* 属性:类的属性,根据其类型,都有默认初始化值
* 整型:byte、short、int、long:0
* 浮点型:float、double:0.0
* char:0
* 布尔boolean:false
* 引用数据类型:null
*
* 局部变量:没有默认初始化值
* 意味着,我们在调用局部变量之前,一定要显示赋值
* 特别地:形参在调用时,我们赋值即可
*
* ④在内存中加载的位置不同
* 属性:加载到堆空间
* 局部变量:加载到栈空间
*
*/
public class UserTest {
public static void main(String[] args) {
User u1 = new User();
System.out.println(u1.name);
System.out.println(u1.age);
System.out.println(u1.isMale);
u1.talk("日语");
}
}
/*
* 类中属性的使用
*
* 属性(成员变量) 局部变量
* 1.相同点
* ①定义变量的格式:数据类型 变量名 = 变量值
* ②先声明后使用
* ③变量都有其对应的作用域
*
* 2.不同点
* ①在类中声明的位置的不同
* 属性:直接定义在类的一对{}内
* 局部变量:生命在方法内、方法形参、代码块内、构造器形参、构造器内的变量
*
* ②关于权限修饰符的不同
* 属性 :可以在声明属性时,指明其权限,使用权限修饰符
* 常用的权限修饰符:private、public、缺省、protected
*
* 局部变量:不可以使用权限修饰符
*
* ③默认初始化值
* 属性:类的属性,根据其类型,都有默认初始化值
* 整型:byte、short、int、long:0
* 浮点型:float、double:0.0
* char:0
* 布尔boolean:false
* 引用数据类型:null
*
* 局部变量:没有默认初始化值
* 意味着,我们在调用局部变量之前,一定要显示赋值
* 特别地:形参在调用时,我们赋值即可
*
* ④在内存中加载的位置不同
* 属性:加载到堆空间
* 局部变量:加载到栈空间
*
*/
public class UserTest {
public static void main(String[] args) {
User u1 = new User();
System.out.println(u1.name);
System.out.println(u1.age);
System.out.println(u1.isMale);
u1.talk("日语");
}
}
class User{
//属性(成员变量)
String name;
int age;
boolean isMale;
public void talk(String language) {//language:形参,也是局部变量
System.out.println("我们使用"+language+"交流");
}
public void eat() {
String food = "烙饼";//局部变量
System.out.println("北方人喜欢吃:" + food);
}
}
//属性(成员变量)
String name;
int age;
boolean isMale;
public void talk(String language) {//language:形参,也是局部变量
System.out.println("我们使用"+language+"交流");
}
public void eat() {
String food = "烙饼";//局部变量
System.out.println("北方人喜欢吃:" + food);
}
}
*************************************************************************************************************************************
package com.atguigu.java;
/*
* 类中方法的声明和使用
*
* 方法:描述类应该具有的功能
* 比如: Math类:sqrt、random
* Scanner类:nextXxx()
*
* 1.举例
* public void eat() {}
* public void sleep(int hour) {}
* public String getName() {}
* public String getNation(String nation) {}
*
*
* 2.方法的声明:权限修饰符 返回值类型 方法名(形参列表){
* 方法体;
* }
* 注:static final abstract 来修饰的方法,后面描述
*
* 3.说明 :
*①权限修饰符 :
* Java规定的4种权限修饰符:private、public、缺省、protected -封装性
*
*②返回值类型:有返回值 和无返回值
*如果方法有返回值,则必须在方法声明时,指明返回值的类型。同时,方法中需要使用
* return关键字来返回指定类型的变量或常量。
* public String getName() {
* return name;变量
* //return "Tom";常亮
* }
*
*如果方法没有返回值,则方法声明时,使用void来表示,通常不使用return,但是使用的话,
* 只能用“return;”表示结束此方法的意思
*
*③方法名:属于标识符,遵循标识符的规则和规范,见名知意
*
*④形参列表:方法可以声明0个、1个、或多个形参
* 格式:数据类型1 形参1,数据类型2 形参2,…
*
*⑤方法体:方法功能的体现
*
*
*
*4.return关键字使用
* 1.使用范围:使用在方法体中
* 2.作用:①结束方法
* ②针对于有返回值类型的方法,使用“return 数据(变量或常量)”方法返回所要的数据
* 3.注意点:return后面不可以声明语句
*
*
* 5.方法的使用中,可以调用当前类的属性和方法
* 特殊:方法A中有调用方法A 称为递归
* 方法中不能定义方法
*
*/
public class CustomerTest {
public static void main(String[] args) {
Customer cust1 = new Customer();
cust1.eat();
}
}
class Customer{
String name;
int age;
boolean isMale;
public void eat() {
System.out.println("客户吃饭");
}
public void sleep(int hour) {
System.out.println("休息了"+hour+ "几个小时");
}
public String getName() {
return name;
}
public String getNation(String nation) {
String info = "我的国籍是" + nation;
return info;
}
}
/*
* 类中方法的声明和使用
*
* 方法:描述类应该具有的功能
* 比如: Math类:sqrt、random
* Scanner类:nextXxx()
*
* 1.举例
* public void eat() {}
* public void sleep(int hour) {}
* public String getName() {}
* public String getNation(String nation) {}
*
*
* 2.方法的声明:权限修饰符 返回值类型 方法名(形参列表){
* 方法体;
* }
* 注:static final abstract 来修饰的方法,后面描述
*
* 3.说明 :
*①权限修饰符 :
* Java规定的4种权限修饰符:private、public、缺省、protected -封装性
*
*②返回值类型:有返回值 和无返回值
*如果方法有返回值,则必须在方法声明时,指明返回值的类型。同时,方法中需要使用
* return关键字来返回指定类型的变量或常量。
* public String getName() {
* return name;变量
* //return "Tom";常亮
* }
*
*如果方法没有返回值,则方法声明时,使用void来表示,通常不使用return,但是使用的话,
* 只能用“return;”表示结束此方法的意思
*
*③方法名:属于标识符,遵循标识符的规则和规范,见名知意
*
*④形参列表:方法可以声明0个、1个、或多个形参
* 格式:数据类型1 形参1,数据类型2 形参2,…
*
*⑤方法体:方法功能的体现
*
*
*
*4.return关键字使用
* 1.使用范围:使用在方法体中
* 2.作用:①结束方法
* ②针对于有返回值类型的方法,使用“return 数据(变量或常量)”方法返回所要的数据
* 3.注意点:return后面不可以声明语句
*
*
* 5.方法的使用中,可以调用当前类的属性和方法
* 特殊:方法A中有调用方法A 称为递归
* 方法中不能定义方法
*
*/
public class CustomerTest {
public static void main(String[] args) {
Customer cust1 = new Customer();
cust1.eat();
}
}
class Customer{
String name;
int age;
boolean isMale;
public void eat() {
System.out.println("客户吃饭");
}
public void sleep(int hour) {
System.out.println("休息了"+hour+ "几个小时");
}
public String getName() {
return name;
}
public String getNation(String nation) {
String info = "我的国籍是" + nation;
return info;
}
}