javaSE(三)

版权声明:博主原创,转发请私信。 https://blog.csdn.net/YooFale/article/details/82759307

1.数组

整数默认初始化值0

浮点数默认初始化值0.0

布尔类型默认初始化值false

字符类型默认初始化值\u0000

[I@7852e922

[有几个代表是几维数组

I代表是Int类型

@固定格式

7852e922代表的是十六进制的地址值

2.java内存分配及堆栈

堆:new出来的东西

栈:局部变量

方法区:代码

本地方法区:和系统相关

寄存器:给寄存器使用

栈小堆大

主方法在栈的最底部,栈先进后出

3.数组的一些问题

数组索引写在栈中,数组实际在堆中

当两个引用指向同一个数组,共同操作,共同改变。

数组的静态初始化

int[] arr = new int[]{1,2,3,4,5};
	int[] arr2 = {1,2,3,4,5};
int[] arr ;
arr = new int[]{1,2,3,4,5};

第一种是正常的,第二种是简写。

正常的数组静态初始化可以先声明后赋值,简写的不行。

数组操作两个常见的错误

 java.lang.ArrayIndexOutOfBoundsException

数组索引越界:索引0~n-1,超出自然取不到对应的值

 java.lang.NullPointerException

空指针异常:在栈中数组找不到对应的在堆中的地址

4.数组的小功能实现

①实现遍历和求最大值。

②实现数组反转

for (int i = 0; i < arr.length / 2; i++) {
			int temp = arr[i];
			arr[i] = arr[arr.length - 1 - i];
			arr[arr.length - 1 - i] = temp;
		}

③查表法(根据索引,查找对应日期)(参数列表是int week 返回值是char(char数组里面的一个元素))

④基本查找(查找指定元素在数组中首次出现的索引)

public static int findIndex(int[] arr, int value) {
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == value) {
				return i;
			}
		}
		return -1;

	}

5.二维数组

二维数组第一个数字代表有几个一维数组

第二个数字代表每个一维数组有几个元素

二维数组的arr[]代表的是第几个一维数组的地址,相当于一维数组的arr,想要输出对应数组的对应元素arr[][]。

一维数组int[]存放在栈中,指向存放在堆中的具体一维数组。二维数组int[][]存放在栈中,指向堆中的二维数组,二维数组的每个元素又指向堆中的另一个具体一维数组。

二维数组三种格式

①int[3][5]       ②int[3][] 每个一维数组在后面再单独赋值         ③直接放入数字int[][] arr = {{1,2},{45,32,12},{1}}

二维数组遍历,外循环控制一维数组个数,内循环控制一维数组内的元素个数

for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}

面对实际生产环境中的各种分季度分月份的情况,二维数组每个值都遍历到了,可以完成4中一维数组的各种小功能

6.java中的参数传递问题

调用了方法,但是没有返回值。

基本数据类型的值传递,因为调用方法结束,方法就被弹栈,从栈中拿出来,局部变量随之消失,所以值不会改变。

引用数据类型的值传递,即使调用方法结束,方法被弹栈,堆内存中数组对象还在,还可以通过地址继续访问。

在java中到底是传值还是传址?

一种说法是基本数据类型传的是值,引用数据类型传的是址。

另一种是都会传递的是值,因为地址值也是值(java之父支持的)

7.编程思想

c面向过程

java面向对象

面向过程每一步都要自己做,强调过程,面向对象强调的是对象实现对应功能。

面向对象的开发:不断创建对象,适用对象的过程

面向对象的设计:管理和维护对象间的关系

8.类和对象

类是属性和行为的集合,对象是事物的具体体现

属性是描述

行为是动作

对象的内存图

类存放在方法区中。方法调用的时候放在栈中,new出来的放在堆中。方法调用结束会弹栈,调用时候会压栈。

9.成员变量和局部变量的区别

* A:在类中的位置不同
    * 成员变量:在类中方法外
    * 局部变量:在方法定义中或者方法声明上
* B:在内存中的位置不同
    * 成员变量:在堆内存(成员变量属于对象,对象进堆内存)
    * 局部变量:在栈内存(局部变量属于方法,方法进栈内存)
* C:生命周期不同
    * 成员变量:随着对象的创建而存在,随着对象的消失而消失
    * 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
* D:初始化值不同
    * 成员变量:有默认初始化值
    * 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
    
* 注意事项:
    * 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
    * 基本数据类型变量包括哪些:byte,short,int,long,float,double,boolean,char
    * 引用数据类型变量包括哪些:数组,类,接口,枚举

 

成员变量与局部变量有什么区别?
类的位置,内存位置,生命周期,初始化值
补充:调用方式不同,局部变量的调用,在方法内直接调用即可,成员变量的调用,需要使用对象.成员变量调用
在使用变量的过程中, 查找变量的顺序是什么?
就近原则

10.匿名对象

使用场景:

①方法仅仅调用一次

②调用方法的时候当做参数传递

好处:节省代码

匿名对象可以调用属性并赋值吗?

可以。但是每调用一次,都是一个新的new,调用多次属性并赋值,最后在堆中是分开的不同new对象,因为没有地址,无法使用赋值后的属性,所以没意义。

11.封装

三大特征:封装,继承,多态

封装:隐藏对象的属性和实现细节,仅提供公共访问方式。(插线板,有插口使用,不用研究零线,火线)

好处:

复用性+安全性

12.private

权限修饰符:可以修饰成员变量和成员方法。被其修饰的成员只能在本类中被访问。

private仅仅是封装的一种表现形式,不能说就是私有

成员变量用private修饰,此处引入set(),get()方法。

有set(),get()方法和一堆private修饰的变量的类就叫javaBean。

13.this

代表当前对象的引用

应用场景:区分成员变量和局部变量

public void setSort(Integer sort) {
        this.sort = sort;
    }

以此为例,如果不加this,代码为sort=sort。局部变量自己给自己赋值,方法调用完毕局部变量随着方法一起出栈销毁了,成员变量没值,那么这个方法就没了意义。加上this可以完成对应的赋值功能。

14.构造方法Constructor

作用:给对象数据进行初始化

命名格式:①方法名与类名完全一致     ②没有具体返回值,连void也没有    ③return没有具体的返回值

构造方法不能用对象调用,但是new对象的时候默认调用。(没有写构造方法,系统自动给一个无参构造方法。写了有参构造,系统也不提供无参构造!所以要写有参构造一定要自己写无参构造!)

有参构造new Person(string name,int age)    无参构造new  Person()

有参构造的好处是可以动态的给对象赋值

有参构造也可以重载

15.给成员变量赋值时两种方式的区别

有参构造和set方法。在实际开发中,用set多,因为灵活,可以改名。

16.创建对象的步骤

①主方法所在的类.class和对象类.class加载斤内存中的方法区

②栈中声明一个对象类型的引用a 

③在堆中创建对象

④给对象属性默认初始值

⑤属性进行显示初始化,将值赋过去(属性给的赋值,没有可以忽略这一步)

⑥构造方法在栈中对对象进行赋值,调用结束构造方法弹栈

⑦将对象的地址值赋给引用a

17.static

staic关键字的引入:

public class Practice {
	public static void main(String[] args) {
	Teacher t1 = new Teacher();
	t1.name="钢铁侠";
	t1.country="美国";
	t1.speak();
	Teacher t2 = new Teacher();
	t2.name="葫芦娃";
	t2.country="中国";
	t2.speak();
	Teacher t3 = new Teacher();
	t3.name="孙悟空";
	t3.speak();
	}

}
class Teacher{
	String name;
	static String country;
	public  void speak(){
		System.out.println("我叫"+name+",我的国籍是"+country);
	}
	
}

输出结果:我叫钢铁侠,我的国籍是美国
                   我叫葫芦娃,我的国籍是中国
                   我叫孙悟空,我的国籍是中国
 

static修饰的是静态。改变以后所有new出来的对象该属性都会受到影响。

static修饰的变量,存放在方法区中对象类.class的静态区中,默认是该数据类型对应的默认值,一次赋值以后就不再改变,每次new新对象都会调用。

静态变量内存图:

18.static使用的注意事项

* a:在静态方法中是没有this关键字的
        * 如何理解呢?
            * 静态是随着类的加载而加载,this是随着对象的创建而存在。
            * 静态比对象先存在。

    * b:静态方法只能访问静态的成员变量和静态的成员方法
        * 静态方法:
            * 成员变量:只能访问静态变量
            * 成员方法:只能访问静态成员方法
        * 非静态方法:
            * 成员变量:可以是静态的,也可以是非静态的
            * 成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
        * 简单记:
            * 静态只能访问静态。(访问非静态可能还没有创建对象,就无法访问)

19.静态变量和成员变量的区别(联系9成员变量和局部变量和上图)

* 静态变量也叫类变量  成员变量也叫对象变量
* A:所属不同
    * 静态变量属于类,所以也称为为类变量
    * 成员变量属于对象,所以也称为实例变量(对象变量)
* B:内存中位置不同
    * 静态变量存储于方法区的静态区
    * 成员变量存储于堆内存
* C:内存出现时间不同
    * 静态变量随着类的加载而加载,随着类的消失而消失
    * 成员变量随着对象的创建而存在,随着对象的消失而消失
* D:调用不同
    * 静态变量可以通过类名调用,也可以通过对象调用(工具类的基础)
    * 成员变量只能通过对象名调用

20.工具类

在类中写一些常用方法,就是工具类。

将所有方法写为static,直接类名.方法即可调用,需要注意的是这时候构造方法要写为private,可以防止其他类创建本类对象。

21.说明书

    * @author(提取作者内容)
    * @version(提取版本内容)
    * javadoc -d 指定的文件目录 -author -version ArrayTool.java
    * @param 参数名称//形式参数的变量名称    *@return 函数运行完返回的数据

参考链接:https://blog.csdn.net/minggeqingchun/article/details/55272005

22.Math

math入门api

static double random() 
          返回带正号的 double 值,该值大于等于 0.0 且小于 1.0

使用math中的方法生成1-100随机数

System.out.println((int)(Math.random()*100)+1);(括号顺序一定不能变!会改变运算顺序,很大概率输出的是1!)

生成的数字在0.0000000-0.9999999

*100    0.0000000-99.9999999

int        0-99

+1         1-100

猜数字小游戏

	Scanner sc = new Scanner(System.in);
		System.out.println("下面请您猜一个1-100的随机数");
		int number = (int)(Math.random()*100)+1;
		while(true){
			int guess = sc.nextInt();
			if(guess==number){
				System.out.println("奖励帕加尼一辆");
				break;
			}else if(guess<number){
				System.out.println("你猜的数字小了");
			}else{
				System.out.println("你猜的数字大了");
			}
		}

从键盘获取数字写在死循环过程中的原因是:方便控制循环。可以确保每次在猜不对的情况下都可以重新输入,猜对的情况下直接跳出死循环。

猜你喜欢

转载自blog.csdn.net/YooFale/article/details/82759307