对象
对象是构成现实世界的基本单位,由属性和方法构成。
属性:对象具备的外观特征或其它特点。
方法:对象具备的行为动作或功能。
类
类是抽象的,是对象的类型,是将多个拥有相同属性的方法和对象所抽离出来的模板。
Java程序是由类构成的,类用于模拟现实生活中的对象。因此,类也是由属性和方法构成。
import java.util.Scanner;
/**计算器类*/
public class Calculator {
//要计算的数值
double num1;
double num2;
//运算符
int opt;
/** 用于计算的方法 */
public double cal(){
//定义返回的计算结果
double result = 0;
Scanner sc = new Scanner(System.in);
System.out.println("请输入要计算的第一个数:");
num1 = sc.nextDouble();
System.out.println("请输入要计算的第二个数:");
num2 = sc.nextDouble();
System.out.println("请选择执行的运算:1.加法 2.减法 3.乘法 4.除法");
opt = sc.nextInt();
//判断运算符
switch(opt){
case 1:
result = num1+num2;
break;
case 2:
result = num1-num2;
break;
case 3:
result = num1*num2;
break;
case 4:
result = num1/num2;
}
return result;
}
/**加法计算 */
/**需要相加的两数使用参数传入,参数编写方式:参数类型 参数名
一个方法可以有任意多的参数,多个参数使用逗号间隔*/
public double addition(int a, int b){
//方法内部可以直接访问参数
int result = a+b;
return result;
}
}
对象和类区别:
- 对象是实体,类是抽象的;public class Demo和main入口方法例外
栈→指针→引用内存堆中实例化后的对象数据→堆
计算机中的实体和抽象的区分在于是否在内存中产生了数据。 - 类是对象的类型,包含了该类型所具备的所有共性的属性和方法。
类与对象的关联性:可以将类通过实例化,变成具体的对象。
类的属性在没有赋值的情况下具备默认值:
类型 | 默认值 |
---|---|
String | null |
int | 0 |
double | 0.0 |
boolean | false |
使用new创建对象的时候,JVM会根据类的结构对属性和方法进行分别构建,在构建属性的过程,如果属性变量没有值,则会创建默认值。
属性:又称为全局变量,也成为成员变量。
局部变量:方法内部定义的变量,局部变量允许和全局变量重名。如果需要访问全局变量(属性),需要通过“this.属性名”方式访问,this表示当前对象的指针。
开发过程中编写的每一个类相当于自定义数据类型的过程。
编写类的方法:
public class 类名{ //方法名命名方式参照变量的命名方式
访问修饰符 返回值类型 方法名(参数列表)
{
//方法体
}
}
方法可以分为:
1.有返回值方法和没有返回值方法;
2.带参(方法具备参数列表)方法和无参方法。
void表示方法没有返回值,方法中的代码执行后没有产生新的数据。
有返回值的方法必须在定义方式时声明返回的数据类型,使用关键字return后将返回return的数据,并终止。
调用有返回值的方法时必须要使用变量接收返回值。
String wareName = name.buy();
System.out.println("购买的是"+wareName);
注:编写方法时应尽量确保方法业务的纯粹性,和方法无关的业务应尽量避免。如执行加减乘除运算,不需要在方法中使用接收。
使用方法带来的优点:
- 方法可以使业务结构分离,逻辑上更清晰,在代码维护时可以根据对应的方法堵路维护;
- 方法可以实现代码的复用。
import java.util.Random;
import java.util.Scanner;
public class LoginDemo {
/**登录方法 */
public void login(){
Scanner sc = new Scanner(System.in);
//输入用户名
System.out.println("请输入用户名");
String userName = sc.next();
//输入密码
System.out.println("请输入密码:");
String password = sc.next();
//获取验证码 在同一个类中,方法可以相互调用,调用时直接写上要调用的方法名即可
String validateCode = createValidateCode();
//输入验证码
System.out.println("请输入验证码:("+validateCode+")");
String code = sc.next();
//校验数据
boolean flag = validate(userName, password, code, validateCode);
//验证通过
if(flag){
//进入主菜单
mainMenu();
}
else{
System.out.println("数据验证失败!");
//回调方法,重新执行一次登录的功能
login();
}
}
/**生成4位数验证码的方法*/
public String createValidateCode(){
String validateCode = "";
Random random = new Random();
for(int i = 1; i <= 4; i++){
//每次生成一个0-9的随机值
int n = random.nextInt(10);
//将生成的随机值拼接
validateCode+=n;
}
//返回验证码
return validateCode;
}
/**验证方法 */
public boolean validate(String name, String pwd, String code, String validateCode){
if(name.equals("admin") && pwd.equals("000") && code.equals(validateCode)){
return true;
}
return false;
}
/**显示主菜单的方法*/
public void mainMenu(){
System.out.println("1. 个人中心");
System.out.println("2. 商品分类");
System.out.println("3. 购物车");
System.out.println("4. 退出登录");
}
/**测试访问*/
public static void main(String[] args) {
//实例化对象
LoginDemo demo = new LoginDemo();
//访问登录方法
demo.login();
}
}
注意事项:
- return的数据类型必须和方法声明的返回值类型一致;
- 只能返回单值;
- return后不应该出现其它语句。
带参数的方法注意点:
- 对各个参数使用逗号“,”分开;
- 使用方法时传入的参数数量、类型、和定义时保持一致。
注:NullPointerException 空引用(指针)异常。
出现该异常的原因是由于对值为null的对象,访问其属性或方法时引发的错误。
耦合性
表示程序中组件与组件的依赖性。
组件:构成一个完整程序的可重复使用的单位(类,方法)。
一个优秀的程序设计应该尽量降低组件间的耦合性。
递归方法:在方法中回调该方法自身的过程。主要用于未知层次结构的数据挖掘,其效率并不高,原因在于每次递归调用的原方法体并没有在栈中释放空间,始终处于访问的状态,导致反复递归每次产生的方法未释放,最终引起栈内存的溢出。
Java中的数据类型:基本类型和引用类型。
所有Java类都是引用类型。
基本类型和引用类型的差异:
- 基本类型可以直接赋值使用,引用类型在使用时必须实例化;
- 基本类型的传值是将值的副本传入方法(即值传递),引用类型的传递是指针地址传递。
附:
try{
Thread.sleep(2000); //使用线程使当前程序延迟2S执行
}catch{
e.printStackTrace();
}
快捷键 | 功能 |
---|---|
alt+/ | 代码补全 |
ctrl+shift+F | 格式化代码 |