1.一维数组
变量:在java程序中,当需要存储单个数据内容时,需要声明一个变量,声明变量的本质就是在内存空间中申请一块存储单元
概念:在java程序中,当需要存储多个数据类型相同的内容时,则需要声明一个数组。声明数组的本质,就是在内存中申请一段连续的存储单元.
数组中的名词:
声明变量: 数据类型变量名 =初始值
数组名: 数组中变量的名称
数组的长度: 数组名.length
数组中的元素: 数组当中值
数组角标(下标): 数组的下标从0开始
ArrayIndexOutOfBoundException 数组下标越界异常
声明数组的格式
数据类型[] 数组名 = new 数据类型[ 数组的长度]
例如: 定义一个长度为3的int类型的一维数组 int[] arr = new int[3]: //动态的定义数组 [推荐] int[] arr1 = new int[](1.2,3)://静态的定义数组
数组的初始化:
注意:在数组声明时,如果不给数组直接赋值,那么,byte/short/int/long/的默认值为0 float和double的默认值为0.0,特别需要注意的是布尔类型的默认值为false;
char 的默认值=====>0 或者u0000[Unicode编码]
双色球中奖实例应用
import java.util.Random;
public class DoubleCoLorBall{
public static void main(String[] args){
//声明一个int类型, 长度为7的数组, 动态
int[] arr = new int[7];
//创建一个随机数对象
Random random = new Random();
//开始摇号, 向数组当中添加值, 需要先摇6红球(范围为1-33)
for(int i = 0; i <= arr.length - 1; i++){
//红球
arr[i] = random.nextInt(33) + 1;
}
//蓝球
arr[arr.length - 1] = random.nextInt(17) + 1;
//将数组中的双色球遍历
System.out.println("本期中奖结果为: ");
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}
}
}
2.成员方法(行为)
语法格式:
[权限修饰符] 返回值类型 成员方法名(形参数据类型4 形参变量名1....,形参数据类型n 形参变量名n)方法体;
构造方法
静态方法
普通方法
3.返回值类型
返回值: 是指从方法体内向方法体外返回的数据内容 返回值类型: 返回值的数据类型
案例:
要返回66,返回值类型为 int
要返回3.14,返回值类型为 double
要返回“嘿嘿”,返回值类型为String
要返回true或者false,返回值类型为boolean
要返回数据内容,可以使用**return** 关键字,将其返回并结束方法体 注意:通常情况下,方法名的首字母要小写,方法名由多个单词构成时,从第二个单词开始,首字母要大写
4.形参列表
形式参数:是指从方法体外向方法体内,传递数据内容
形参列表: 形式参数可以有多个
语法格式: 成员方法名(形参数据类型1 形参变量名...,形参数据类型n 形参变量名n) 注意:如果一个方法不需要返回任何内容,那么返回值就写void,如果一个方法不需要传入任何内容则形参列表啥也不写。
示例
public class A {
public void show(){
System.out.println("方法体内是描述该方法的作用");
}
static class MathDemo {
public int add(int a, int b){
return a + b;
}
public static void main(String[] args){
MathDemo md = new MathDemo();
md.add(1,2);
System.out.println("方法执行完,该我了!");
}
}
}
5.面向对象(没有对象也要面向吗?-----来自单身狗的疑问^_^)
什么是对象?
万事万物皆对象
什么是面向对象?
面向对象的本质就是分析事物的特征(名词)和行为(动词) 什么是面向对象编程:
先用面向对象的思想进行分析,再用面向对象的语言进行翻译的过程
面向过程和面向对象的区别?
把大象装冰箱需要几步? 面向过程===三步--->打开冰箱--->把大象装进冰箱--->关上冰箱 面向对象===一步--->找个人把大象装进冰箱
6.类、对象、引用的基本概念
对象:在java中,对象是指客观存在的实体语法格式:
new 引用数据类型();
案例:
//表示创建一个Person类型的对象newPerson(;类:简单来说类就是"分类",是指具有相同特征和行为的多个事物共性的抽象,在java中表现为一种引用数据类型,其中包含描述特征的成员变量和描述行为的成员方法
语法格式:
{权限修饰符} class 类名{
类体; }
案例:
class Person{
类体; }
注意:通常情况下,类名的首字母要大写,当类名由多个单词构成时,每个单词的首字母都要大写;[驼峰命名法]
成员变量(特征、属性)
语法格式
[权限修饰符] 数据类型 成员变量名 = 成员变量值 其中等号和成员变量值可以省略,通常情况下都省略,分号不可以省略 案例:
int age = 3;
private String name;
注意:通常情况下,成员变量名的首字母要小写,当成员变量名由多个单词构成时,从第二个单词开始,首字母要大写;
引用:引用类型的成员变量名,简称“引用”
语法格式: 引用数据类型 引用变量名 = new 引用数据类型();
案例:
//表示创建一个Person类型的引用p 指向Person类型的对象Person p = new Person(); 引用的使用方法: 引用名.成员变量名 = 成员变量值; //p.name = bb; 注意:当一个类被定义完毕后,可以使用new关键字来创建该类的对象,这个过程被称为类的实例化类是对象的抽象,对象是类的实现。
案例:定义一个坐标类,特征有,横坐标x和纵坐标y,创建坐标类的对象,将对象的信息打印出来,修改特征信息(要求横坐标+1, 纵坐标增加自定义值),并再次打印
import java.util.Scanner;
public class C {
int x;
int y;
final float a = (float) 3.14;
Scanner sc = new Scanner(System.in);
public C(){};
public C(int a, int b){
this.x = a;
this.y = b;
};
public void show(){
System.out.println("该点的横坐标为: " + x);
System.out.println("该点的纵坐标为: " + y);
};
public int addX(){
x = x + 1;
return x;
};
public int addY(){
System.out.println("请输入纵坐标增长的数值: ");
int m ;
m = sc.nextInt();
y = y + m;
return y;
};
public static void main(String[] args) {
C C = new C();
C c = new C(5, 6);
c.show();
System.out.println("======================");
c.addX();
c.addY();
c.show();
}
}
7.构造方法和方法重载
语法格式:
[权限修饰符] 构造方法名 [类名] (形参列表){
构造方法体 }
案例:
public class Person{
String name;
int age; }
public Person(){} //无参构造方法
public Person(String name, int age){} //全参构造方法
注意事项
a.构造方法名与类名完全相同并且没有返回值类型,连void都不许有(因为void是有返回值--空); b.当使用new关键字创建对象时, 会自动调用构造方法来实现成员变量的初始化工作;
默认构造方法
a.当一个类中没有定义任何构造方法时,编译器会自动添加一个无参空构造方法,叫做 默认/缺省构造方法如: Person(){}
b.若类中出现了构造方法,则编译器不再提供任何形式的构造方法
public class Phone{
//当用户没有写任何形式的构造方法时, 系统会自动为程序员提供一个无参的构造方法
/*public Phone(){
System.out.println("我是无参构造方法...我正在被调用");
}*/
//若用户自己编写了任意有参或无参的构造方法, 系统不会再提供默认的构造方法
String band;
float price;
public void show1(){
System.out.println("品牌: " + band + ", 价格: " + price);
}
public static void main(String[] args) {
Phone p = new Phone();
p.show1();
p.band = "Yeme";
p.price = (float) 5.99;
p.show1();
}
//调用main方法的是java虚拟机JVM
}
8.单元测试方法
一个普通类
public class Person {
String name;
int age;
public void show(){
System.out.println("name = " + name + ", age = " + age);
}
//单元测试(Ctrl+Shift+t)---选择JUnit4并添加相应导包需要的jar包
//好处是不需要main方法
}
其测试类
public class PersonTest {
@Test
public void test01() {
Person p = new Person();
p.show();
}
}
9.this关键字
基本概念在构造方法中和成员方法中访问成员变量时,编译器会加上this.的前缀,而this.相当于汉语中我的”,不同的对象调用同一个方法时,由于调用方法的对象不同导致this关键字不同,从而this.方式访问的结果也就随之不同。
使用方式
(1)当形参变量名与成员变量名相同时,在方法体中会优先使用形参变量(就近原则),若希望使用成员变量,则需要在成员变量的前面加上this.的前缀,明确要求该变量是成员变量。 (2)在构造方法的第一行可以使用this的方式来调用本类中的其它构造方法(了解)。
实例展示: get, set 方法
public class Person {
String name;
int age;
public void show(){
System.out.println("name = " + name + ", age = " + age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
10.封装
基本概念
通常情况下可以在测试类给成员变量赋值一些合法但不合理的数值,无论是编译阶段还是运行阶段都不会报错或者给出提示,此时与现实生活不符。为了避免上述错误的发生,就需要对成员变量进行密封包装处理,来隐藏成员变量的细节以及保证成员变量数值的合理性,该机制就叫做封装
实现流程
(1)私有化成员变量,使用private关键字修饰:
(2)提供公有的get和set方法,并在方法体中进行合理值的判断 (3)在构造方法中调用set方法进行合理值的判断
代码示例: 以8中为基础, 改变为满足输入年龄符合自己要求
/**
* @Author: bb
* @Description:
* 实体类 在包(com, bean, pojo, doamin, entity)中存放
* @Date Created in 2024-01-31 22:47
* @Modified By:
*/
public class Person {
private String name;
private int age;
public void show(){
System.out.println("name = " + name + ", age = " + age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 0 && age < 150) {
this.age = age;
}else{
System.out.println("您输入的年龄有误!!!");
}
}
}
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @Author: bb
* @Description:
* @Date Created in 2024-01-31 22:59
* @Modified By:
*/
public class PersonTest {
@Test
public void test01() {
Person p = new Person();
p.show();
p.setName("bb");
p.setAge(-1);
}
}
输出结果如下:
11.方法重载(会用即可)
(1)概念
在Java语言中若方法的名称相同,但**参数列表相同**,这样的方法之间构成重载关系(Overload).
(2)体现形式
方法重载的主要形式体现在: 参数的个数不同、参数的类型不同、参数的顺序不同与返回值类型和形参变量名无关,但建议返回值类型最好相同。
判断方法能否构成重载的核心: 调用方法时能否加以区分
(3)实际意义
方法重载的实际意义在于 调用者只需要记住一个方法名就可以调用各种不同的版本,来实现各种不同的功能。
简单示例:
public class B {
public static void main(String[] args) {
int a = 1;
String name ="bb";
char c ='a';
boolean b = true;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(name);
}
}
煤油啦!!!因为练车考驾照, 还出去玩了两天,就没有写完^-^
后面慢慢都会补起来的!!!
仅供参考!!!
欢迎大家批评指正*_*
晚安O.O