Java教程

Java第三周学习小结

本文主要是介绍Java第三周学习小结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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);    其他方法

这篇关于Java第三周学习小结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!