ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java第三周学习小结

2021-10-03 09:32:00  阅读:116  来源: 互联网

标签:arr Java 构造方法 int 方法 第三周 数组 数据类型 小结


1.跳转控制语句-----return

定义

return-----返回具体的结果(结束方法);很少单独使用,用在具有具体返回值类型的方法中.

return 结果值;

2.方法

(1)方法的概念

方法就是表示特定功能的一段代码,使用功能代码块{}将核心内容包起来,并为其起一个名字(符合标识符命名)即可.

(2)方法的定义

<1>有具体返回值的方法

定义格式:固定格式

权限修饰符 static 返回值类型 方法名(形式参数类型1 变量1,形式参数类型2 变量2...){
    功能代码
    return 结果;
}
public static 返回值类型 方法名(形式参数类型1 变量1,形式参数类型2 变量2....){
    功能代码
    return 结果;
}

解释:

权限修饰符:现在使用的public为公开的,权限足够大的,后期还会学别的;

static:面向对象在学习,目前阶段必须加上static;

返回值类型:数据类型;

方法名:需要见名知意,符合标识符命名规范;

形式参数类型:数据类型;

变量名:需符合标识符命名规范.

有返回值类型的方法调用:

1)单独调用
add(a,b) ; 没有输出结果
		
2)输出调用:可以用,不建议用,因为如果需要将结果进一步操作,写死,不太好!
System.out.println("两个数据之和是:"+add(a,b)) ;
		
3)赋值调用:推荐
int result = add(a,b) ;
System.out.println("两个数据之和是:"+result);

语法:返回值类型 变量名 = 方法名(实际参数1,实际参数2...);

写程序时的两个明确:

(1)明确返回值类型
(2)明确参数类型以及参数个数

<2>没有具体返回值的方法

定义格式:固定格式

权限修饰符 静态修饰符static void 方法名(形式参数类型1 变量1,形式参数类型2 变量2...){
    输出语句/数据交换
}


注意:用void代替了返回值类型

无返回值方法的调用:

1)单独调用:推荐
方法名(实际参数列表) ;
2)输出调用:不行
3)赋值调用:不行

(3)Java中定义方法和调用方法的注意事项

<1>方法和方法是平级关系,在一个方法中不能嵌套定义另一个方法

<2>Java为强类型语言,定义方法的时候,形式参数类型必须携带,不能省略

<3>调用方法的时候,实际参数不需要携带数据类型

<4>定义方法的时候,有{左大括号的地方不能有分号;   

有;号的地方不能有{左大括号,会显示这个方法缺少方法主体,没有意义.

3.方法重载(overLoad)

(1)定义

一个类中可以定义多个相同名称的方法,多个方法名称相同,参数列表不同,与返回值无关.

(2) 注意事项

1)参数个数不同
2)参数类型不同
3)考虑类型顺序

(3)目的

方法重载的目的:就是为了让这个功能扩展性更多.

4.数组

(1)数组的定义

一组连续的存储空间,存储多个相同数据类型的值.

(2)数组定义格式

数据类型[]   数组名称;    eg:   int[] arr ;  定义了一个int类型的数组变量arr

数据类型    数组名称[];    eg:   int arr[] ;  定义了一个int类型的arr数组变量

(3)数组的初始化

<1>动态初始化

动态初始化:我们给定数组的长度,元素由系统(Jvm)默认初始化;

数据类型[] 数组名称 = new 数据类型[长度] ; 推荐第一种  eg:   int[] arr = new int[3] ;
数据类型 数组名称[] = new 数据类型[长度] ;            eg:   int arr[] = new int[3] ;

<2>静态初始化

静态初始化:静态初始化是指给出具体的长度内容,系统默认分配长度.

格式

数据类型[] 数组名称 = new int[]{元素1,元素2,元素3,.....} ; 推荐使用
数据类型  数组名称[] = new int[]{元素1,元素2,元素3,.....} ;

简化格式:书写代码简单(注意此格式不能换行)
			数据类型[] 数组名称 = {元素1,元素2,元素3,.....} ;
			数据类型 数组名称[] = {元素1,元素2,元素3,.....} ;

注意:要么动态初始化,要么静态初始化,不能动态和静态一起使用.

(4)数组元素的访问

数组名称[索引值];索引值从0开始
arr[0];//访问数组第一个元素
int[] arr = new int[3] ;//jvm系统默认对3个初始化
解析格式:
=左边: 
int:数组中存储的int数据类型
[]:数组:一维数组(默认)
arr:变量名(数组的在内存中的对象名称)
=右边:
new:表示创建对象
int:表示存储的数据int类型
[3]:数组中存储的3个元素:(长度)

System.out.println(arr) ; //[I@6d06d69c :地址值
[:表示一维数组
I:int数据类型
@:地址值标记
6d...:十六进制数据

5.引用数据类型常见异常

(1)编译时期异常

jvm检查语法不通过; 语法格式存在问题(例如数组和变量格式写错,变量被定义多次等)

(2)运行时期异常

开发者代码书写不严谨出现的问题

eg1:java.lang.ArrayIndexOutOfBoundsException:数组角标越界异常
        出现的原因:访问了数组中不存在的角标(索引值)
        如何解决:检查代码,更改索引值

eg2:java.lang.NullPointerException:空指针异常
        引用类型的默认值都是null;
        String s = null ;  字符串是一种特殊的引用类型
        出现的原因:某一个对象已经为空了,null(没有堆内存地址),这个时候还要去访问元素或者调用
        这个对象的方法,那么就出现空指针;
        如何解决:
            使用逻辑判断语句,对该对象进行非空判断

6.经典面试题

(1)基本数据类型做形式参数特点:基本类型作为形式参数传递特点:形式参数的改变不会影响实际参数.当方法结束后,就消失了(临时变量-----形式参数);

(2)引用数据类型做形式参数特点:形式参数的改变,会直接影响实际参数.是空间地址值的传递,当方法结束了,对象不会被立即回收,等待垃圾回收器回收(GC).

注意:String为特殊引用类型,他的效果和基本数据类型相同.

class Demo{
    public static void main(String[] args){
        int a = 10 ;
        int b = 20 ;
        System.out.println("a:"+a+",b:"+b) ; //10,20
        change(a,b) ;
        System.out.println("a:"+a+",b:"+b) ; //10,20
        System.out.println("--------------------------") ; 
        int[] arr = {1,2,3,4,5} ;
        System.out.println(arr[1]) ; //2
        System.out.println("--------------------------")  ;
        change(arr) ;
        System.out.println(arr[1]) ;//4
    }
    public static  void  change(int a,int b){
        a = b ;
        b = a+b ;
        System.out.println("a:"+a+",b:"+b) ; //20,30
    }
    public static void change(int[] arr){
        for(int x = 0 ; x < arr.length;x++){
            if(arr[x] % 2== 0){
                arr[x] = arr[x]*2 ;
            }
        }
        
    }
}

7.数组高级排序-----冒泡排序

(1)冒泡排序思想:两两比较,将较大的值往后放,第一轮比较完毕后,最大值出现在最大索引处,依次进行第2轮,第3轮比较...就可得到最终结果.每一次比较,下一次就会减少一次,比较次数是数组长度-1次;

for(int i = 0;i < arr.length - 1;i++){
			for(int j = 0;j < arr.length -1 - i;j++){
                     元素互换
				if(arr[j] > arr[j + 1]){
					int temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
}

8.面向对象的思想特点

(1)更符合我们生活中思想行为习惯

(2)让更复杂事情简单化

(3)角色发生变化,从执行者变为指挥者

<经典面试题>:什么是面向对象:阐述面向对象思想特点加生活中例子.

java语言面向对象的三大特征:封装,继承,多态

9.类

(1)类的定义:能够描述一组事物的属性和行为的集合.  能够描述现实中真实存在的事物.

java中最基本的单元:  类-----------------事物

                                  成员变量---------描述事物的属性

                                  成员方法----------描述事物的行为(非静态的)

(2)成员变量------------在类中,方法外

    成员方法-------------之前怎么定义,现在还怎么写,不过去掉static关键字

public 返回值类型 方法名(形式参数列表){
   功能代码块
   return 具体的结果; 
}
public void 方法名(形式参数列表){
   输出打印
}

<注意>定义方法时的两个明确

10.类与对象的关系

类:能够描述一组事物的属性和行为的集合;类-----描述现实世界真实存在"事物" 

对象:描述具体的事物,事物为泛指,描述具体的事物,通过代码创建当前类的对象.

<注意>类是一个泛指,对象才是当前事物的具体体现.

<代码体现>

类名 对象名 = new 类名();

//给具体事物属性赋值
对象名.成员变量 = 根据类型赋值;

//调用具体事物的行为
对象名.成员方法名();

11.局部变量与成员变量的区别

(1)在类中书写位置不同

局部变量:在方法定义中或者是方法声明上.
成员变量:在类的内部,方法的外部.

(2)在内存中的位置不同

局部变量:在栈内存中
成员变量:在堆内存中

(3)生命周期不同

局部变量:随着方法调用而存在,随着方法调用结束而消失
成员变量:随着对象的创建而存在,随着对象的调用完毕,不会立即消失,等待垃圾回收器空闲的时候回收.

(4)初始化时机不同

局部变量:可以先定义,使用之前必须初始化;要么直接初始化.
成员变量:可以不赋值,系统默认对成员变量初始化;
                    也可以通过对象名.成员变量 =  值  完成赋值.

11.典型例题(形式参数为类)

如果一个方法的形式参数是一个类,实际参数需要传递的当前类的具体对象

class Student{
	public void study(){
		System.out.println("爱学习,爱生活!") ;
	}
}
class StudentDemo{
	public void method(Student s){//Student student = new Student() ;
		s.study() ;  //student.study();
	}
}
class StudentTest{
	public static void main(String[] args){
		//需求:
		//1)要访问StudentDemo类中的method方法
		//2)调用的时候,实际参数如何书写呢?	
		StudentDemo sd = new StudentDemo() ;
		Student  student = new Student() ;
		Student student = new Student() ;
		sd.method(student);
	}
}

12.匿名对象

(1)定义

匿名对象:名义名字的对象.

(2)定义格式及访问格式

<1>定义:     new 类名() ;    eg:   new Student();

<2>访问:   访问类的成员变量          new 类名().成员变量名;
                 访问类的成员方法:没有具体返回值类型:     new 类名().成员方法名() ;
      

(3)好处

<1>匿名对象可以作为对象传递

<2>节省内存空间

<3>开发中,匿名对象一般 使用"一次即可",使用完毕就立即被垃圾回收器回收

<4>大多用在手机端,节省内存空间

13.封装

(1)封装关键字private:私有的,不能直接访问的;

(2)封装的概念:为了保证类属性的安全性,所有的属性都必须加入private关键字,并且对外提供公共访问方法间接对成员变量(属性)进行赋值;setXXX()/getXXX():都是public:权限足够大.

(3)封装的特点:被private修饰的成员变量或者是成员方法,只能在本类中访问;
                       外界类是不能直接访问的,间接可以通过公共的成员方法访问!

14.this关键字

当局部变量名称和成员变量名称一致时(局部变量隐藏了成员变量),Java提供了一个关键字:this;

this:代表当前类对象的地址值引用.

15.构造方法

(1)构造方法的定义:

构造方法:构造方法是一种特殊的方法,名字和类名完全相同.

(2)构造方法的特点:

<1>方法名和类名完全一样

<2>构造方法没有返回值类型

<3>构造方法连void都没有

注意:构造方法支持方法重载.

(3)构造方法的作用

构造方法就是对类中的成员属性进行初始化.

(4)构造方法的分类

<1>无参构造方法:
  public Student(){};
<2>有参构造方法:
  public Student(String name,int age){};

(5)构造方法的注意事项

<1>当开发者没有提供无参构造方法,也没有提供有参构造方法,系统永远给我们提供无参构造方法;

<2>如果我们提供了有参构造方法,系统将不会默认提供无参构造方法.

16.给成员变量(private修饰)赋值的几种方式

(1)公共访问方法赋值

setxxx(xxx);

(2)有参构造方法进行赋值

public 类名(形式参数){
    this.name = name;
    this.age = age;
}

17.一个标准类的内容

(1)成员变量:   私有化 private

(2)构造方法:   无参/有参 构造方法

(3)成员方法:   setxxx(xxx);  getxxx(xxx);    其他方法

标签:arr,Java,构造方法,int,方法,第三周,数组,数据类型,小结
来源: https://blog.csdn.net/Mr___Lr/article/details/120495920

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有