在继续学习Java面向对象的知识,首先学习Java类和类的成员
package OOPpreliminary;
/**
*
* @Description
* @author
* @version
* @date 2021年12月2日下午3:27:32
* 1.java类及类的成员:属性、方法、构造器;代码块、内部类
* 2.面向对象三大特征:封装、继承、多态(抽象)
* 3.其他关键字:this、super、static、final、abstract、interface、package、import等
*
* 面向对象的两个要素:类和对象
* 类:一类事物的抽象概念
* 对象:实际存在的个体,也称实例
* 重点是对类的设计,设计类就是设计类的成员
*
* 类和对象创建和执行的三步骤:
* 创建类
* 类的实例化
* 调用对象的结构:"对象.属性" "对象.方法"
*/
public class Introduce
{
public static void main(String[] args) {
}
}
紧接着学习类中属性和方法的定义和使用
package OOPpreliminary;
/**
*
* @Description
* @author
* @version
* @date 2021年12月3日上午8:56:21
*
* 属性=成员变量=field=域、字段
* 方法=成员方法=函数=method
* 创建类的对象=类的实例化=实例化一个类
* 如果一个类创建了多个对象,每个对象都独立拥有一套类的属性(非static的)
* 修改其中一个对象的属性,不改变另外一个对象属性
*/
public class PersonTest
{
public static void main(String[] args) {
//创建类
Person p1 = new Person();
//调用类的属性
p1.name="Tom";
System.out.println(p1.name);
//调用类的方法
p1.eat();
p1.sleep();
p1.talk("Chinese");
//创建多个对象
Person p2;
p2=p1;//将p1保存对象的地址赋给p2,导致p1、p2指向堆空间同一个对象实体
System.out.println(p2.name);//Tom
p2.age=10;
System.out.println(p1.age);//10
}
}
class Person
{
//属性
String name;
int age=1;
boolean isMale;
//方法
public void sleep()
{
System.out.println("We can sleep");
}
public void eat()
{
System.out.println("We can eat");
}
public void talk(String language)
{
System.out.println("We can talk with "+language);
}
}
package OOPpreliminary;
/**
*
* @Description
* 类中属性的使用
* 属性(成员变量)vs局部变量
* 相同点:
* 1.定义变量的格式相同
* 2.先声明后使用
* 3.变量都有对应作用域
* 不同点:
* 1.在类中声明位置不同
* 属性:直接定义在类的一对{}中
* 局部变量:生明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
* 2.关于权限修饰符的不同
* 在声明属性时可以指明其权限,用权限修饰符
* 常用权限修饰符:private、protected、public、缺省(没写)-->封装性
* 局部变量:不可以使用权限修饰符
* 3.默认初始化值
* 属性:与数组时默认初始化值相同
* 局部变量:没有默认初始化值
* 特别的,形参在调用时赋值即可
*
* 4. 在内存中加载的位置不同
* 属性:加载在堆空间中(非static)
* 局部变量:加载在栈空间中
*
* 虚拟机栈:平时所说的栈,局部变量加载在栈中
* 堆:将new出来的结构(数组、对象)加载在堆空间中,对象的非static的属性加载在堆空间中
* 方法区:类的加载信息、常量池、静态域
* @author
* @version
* @date 2021年12月3日上午9:33:09
*/
public abstract class UserTest
{
public static void main(String[] args) {
User u1=new User();
System.out.println(u1.age);//0
System.out.println(u1.name);//null
System.out.println(u1.isMale);//false
}
}
class User
{
String name;
int age;
boolean isMale;
public void talk(String language)//形参
{
System.out.println(" We use the"+language+"to talk ");
}
public void eat()
{
String food="烙饼";//局部变量
System.out.println("The north people in China like eating"+food);
}
}
package OOPpreliminary;
/**
*
* @Description
* 类中方法的声明和使用
* 编译完成以后,生成一个或者多个字节码文件,使用JVM中类的加载器和解释器对生成的字节码文件进行解释运行,将字节码文件对应的类加载到内存中,涉及到内存解析
* @author
* @version
* @date 2021年12月3日上午10:08:39
* 方法: 描述类应该具有的功能
* 如:Math.sqrt()、Math.random()
* Scanner.nextXxxx();
* Arrays.toString();Arrays.binarySearch();Arrays.sort();Arrays.equals();
* 方法的声明:权限修饰符 返回值类型 方法名(形参列表(int a,int b)){方法体}
* static、final、abstract来修饰方法
* 1.权限修饰符:private、public、缺省、protected-->封装性
* 2.返回值类型:有返回值vs无返回值
* 如果方法有返回值,必须在方法声明时,指定返回值类型,在方法中要用return返回指定的返回值类型变量和常量
* 如果方法没有返回值,声明时用void,一般不需要return,若使用,可以只用 return; 表示结束方法
* 3.方法名:标识符,自主定义,见名知意
* 4.形参列表:
* 格式:数据类型1 形参1,数据类型2 形参2
* 5.方法体:方法功能的体现
*
*
* return关键字的使用
* 使用在方法体中
* 作用:
* 1).结束方法
* 2).针对于有返回值类型的方法: return 数据; 返回所要数据
* 3).return关键字后面不能有执行语句
* 方法的使用:方法的使用可以调用当前类的属性、当前类中的方法
* 自己调自己:递归
* 方法中不可以定义新的方法
*/
public class CustomerTest
{
public static void main(String[] args) {
Customer c1=new Customer();
c1.name="Tom";
String customerName=c1.getName();
System.out.println(customerName);
c1.sleep(8);
}
}
class Customer
{ //属性
String name;
int age;
boolean isMale;
//方法
public void eat()
{
System.out.println("客户吃饭");
return;
//System.out.println("hello"); return后不可以再执行其他操作
}
public String getNation(String nation)
{
return nation;
}
public String getName()
{
return name;
// public void swim()
// {
//
// }不可以方法里定义方法
}
public void sleep(int hour)
{
System.out.println("一般睡"+hour+"个小时");
eat();
}
}