Java学习总结

 

目录

 java程序的运行机制和JVM

面对对象程序设计简介

Arrays类的常用方法

 定义类

数据类型分类

基本类型的类型转换

foreach循环


 java程序的运行机制和JVM

由java语言编写的程序需要经过编译步骤,但这个编译步骤不会生成特定平台的机器码,而是生成一种与平台无关的字节码(*class文件)必须使用java解释器来解释执行

java源文件->javac->字节码文件->java->特定平台的机器码

java虚拟机  负责解释执行字节码(JVM)  不同平台的JVM不同,但都是相同的接口

面对对象程序设计简介

基本思想:使用类、对象、继承、封装、消息等基本概念进行程序设计

采用面向对象方式开发的软件系统,其最小的程序单元是类,这些类可以生成系统中的多个对象,而这些对象则直接映像成客观世界的各种事物

成员变量(状态数据)+方法(行为)=类定义

程序单位:

        面向对象:类

        面向过程:函数 

面向对象的基本特征:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)

封装:将对象的实现细节隐藏,通过一些公用的方法来暴露该对象的功能

继承:是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力

多态:多态性是指允许不同软件元素对同一消息作出响应
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

对象的基本特征:标识唯一性、分类性、多态性、封装性、模块独好性

是具有共同属性、共同方法的一类事物

(类是对象的抽象,对象是类的实例)

Arrays类的常用方法

位于 java.util 包中,主要包含了操作数组的各种方法。

import java.util.Arrays;

比较数组,赋值,截取、输出

import java.util.Arrays;

public class ArrayText
{
    public static void main(String[] args)
    {
        //java中定义数组常用type[] arrayName来表示
        int[]a = new int[]{3,4,5,6};
        int[]a2 = new  int[]{3,4,5,6};
        //Arrays.equals(a,a2) 若a,a2数组长度、每个元素依次相等则输出true
        System.out.println("数组a和数组a2是否相等:"+ Arrays.equals(a,a2));
        //Arrays.copyOf(a,6) 复制a数组,生成一个新的b数组
        int[]b = Arrays.copyOf(a,6);
        System.out.println("数组a和数组b是否相等:"+ Arrays.equals(a,b));
        //Arrays.toString(b) 输出b数组{3,4,5,6,0,0}
        System.out.println("b数组的元素为:"+Arrays.toString(b));
       //将b数组的第3个元素(包括)到第五个元素(不包括)赋值为1,得到{3,4,1,1,0,0}
        Arrays.fill(b,2,4,1);
        Arrays.sort(b);//对b进行排序 得到{0,0,1,1,3,4}
        System.out.println("b数组的元素为:"+Arrays.toString(b));
    }
}

 定义类

 1.定义类的简单语法:

修饰符可以省略,也可以是public、final、abstract

//java中各类修饰符总结

[修饰符] class 类名
{
    零到多个构造器定义...
    零到多个成员变量...
    零到多个方法...
}

 2.定义方法的语法格式:

修饰符可以省略,也可以是public、protected、private(三者只能出现其一)static、final、abstract(两者只能出现其一)。它们可以与static组合起来修饰方法

[修饰符] 方法返回值类型 方法名(形参列表)
{
    //由零条到多条可执行性语句组成的方法体
}

 方法的所属性:不能独立存在,必须属于类或对象

方法的参数传递机制:值传递

方法重写(复写/覆盖):
在子类父类关系中有一模一样的方法。
方法重写的注意事项:
       1).@Override:注解,起到标记提示的作用写在方法上面,起到检测方法是否正确覆盖如果没有就报红提示,其实就算不写,如果方法没问题也能完成对父类相同方法的覆盖
       2).重写方法的返回值类型的范围,必须【小于等于】父类返回值类型的范围
       3).重写方法的权限修饰符的范围,必须【大于等于】
       父类返回值类型的范围
       public > protected > 默认的(default不用写出来) > private1
       【小结:实际运用方法重写,只需要和父类写得一模一样就可以了】
       方法重写的好处:既能保证父类的方法不变,子类也可以根据自己的需求做不同的实现。
  

3.定义构造器的语法格式:

修饰符可以省略,也可以是public、final、abstract

构造器既不能定义返回值类型,也不能使用void声明构造器没有返回值。如果为构造器定义了返回值类型,或者使用void声明构造器没有返回值,编译时不会出错,但Java会把这个所谓的构造器当成方法来处理——它就不再是构造器

[修饰符] 构造器名(形参列表)
{
    //由零到多条可执行性语句组成的构造器执行体
}

数据类型分类

 java语言是强类型语言

强类型语言的特点:

1.所有变量必须先声明,后使用

2.指定类型的变量只能接受类型与之匹配的值

Java学习总结_第1张图片

基本类型的类型转换

自动类型转换 

Java学习总结_第2张图片

 强制类型转换(也叫缩小转换)

格式:(targetType)value     可能造成数组丢失

foreach循环

优点:无需获得数组和集合长度,无需根据索引来访问数组元素和集合元素,自动遍历数组和集合的每个元素

格式:

for(type variableName:array|clloection)
{
    //variableName//自动迭代访问每个元素
}

foreach语句的局限性
通过上面的例子可以发现,如果要引用数组或者集合的索引,则foreach语句无法做到,foreach仅仅老老实实地遍历数组或者集合一遍

总结

foreach语句是for语句特殊情况下的增强版本,简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。相对老的for语句来说是个很好的补充。提倡能用foreach的地方就不要再用for了。在用到对集合或者数组索引的情况下,foreach显得力不从心,这个时候是用for语句的时候了。foreach一般结合泛型使用

this和super的用法总结

 super:引用父类对象
        super.成员变量 调用父类的成员变量(用来访问父类被隐藏的成员变量即就是private关键字修饰的成员变量只能被间接访问)
        super.成员方法 调用父类的成员方法(调用父类中被重载的方法)
        super() 调用父类的空参构造器
        super(参数) 调用父类的有参构造器
        this:访问(调用)当前类的对象
        this.成员变量 访问当前类的成员变量this.成员方法 调用当前类的成员方法
        this() 访问当前类的空参构造器
        this(参数) 访问当前类的有参构造器
        注意:不管是 this()、 super() 还是 this(参数)、 super(参数) 只能写在构造方法的第一语句即super()和this的用法一样的在构造方法中:都必须得是第一行,所以二者不可共存
        super用法注意:在子类的构造方法中调用父类构造方法只能访问一次即子类中:不能同时存在super(),和super(参数)两条语句
        

 Scanner类

 Scanner是用于做键盘录入的类
1.在java.util包下,需要导包
import java.util.Scanner;
注意: 写在类名的上面
2.创建Scanner对象
Scanner sc=new Scanner(System.in);
3.获取键盘录入数据,通过对象调用Scanner类提供的nextInt()方法实现键盘录入一个int类型的数值int num=sc.nextInt(); 
获取键盘录入的int数据,(因为nextInt方法返回的是一个int类型的结果所以要用int类型的变量来接收)
int num1 = sc.nextDouble();
获取键盘录入的double类型的数据
String str=sc.next(); 
获取键盘录入的字符串,如果遇到一个空格就会结束录入,这样空格后面的字符串就不会被录入scanner.nextLine();
获取键盘录入的一行字符串(可含有空格)

 继承(extends)

 

implements 是实现接口的关键词
理解:解决多子类中【共性抽取】的问题,提高了代码的复用性。

继承的格式:

public class Father{
    //成员变量;
    //构造方法    
    //成员方法
}
public class Son extends Father{
    //成员变量    
    //构造方法    
    //成员方法
}
```

2.继承中成员的访问特点
        1)成员变量的访问特点如果欲访问的变量,子类中存在就先访问子类中的这个变量,如果没有就访问父类,如果父类也没有,就报错。
        this.成员变量—>指明访问本类的成员变量
        super.成员变量—>指明访问父类的成员变量
        2).成员方法的访问特点子类有就先用子类的,子类没有就用父类的,如果父类也没有就报错。

方法重写(复写/覆盖):
在子类父类关系中有一模一样的方法。
方法重写的注意事项:
       1).@Override:注解,起到标记提示的作用写在方法上面,起到检测方法是否正确覆盖如果没有就报红提示,其实就算不写,如果方法没问题也能完成对父类相同方法的覆盖
       2).重写方法的返回值类型的范围,必须【小于等于】父类返回值类型的范围
       3).重写方法的权限修饰符的范围,必须【大于等于】
       父类返回值类型的范围
       public > protected > 默认的(default不用写出来) > private1
       【小结:实际运用方法重写,只需要和父类写得一模一样就可以了】
       方法重写的好处:既能保证父类的方法不变,子类也可以根据自己的需求做不同的实现。
  

public class Phone{				
	public void show(){	
		System.out.println("来电显示");					
		}				
}								
public class NewPhone extends Phone{					

@Override//提示该方法是重写父类的show方法					
    public void show(){						
        super.show(); //调用父类方法						
        System.out.println("显示头像");						
        System.out.println("显示姓名");					
    }				
}

你可能感兴趣的:(Java学习总结)