通过实例带你重新温习java语言,这些基础java知识你都了解吗?

目录

1. 配置java编译环境

2. java基本语法

3. 流程控制与数组

4. 类

5. 集合类的使用

实例1:使用switch结构计算每个月的天数(考虑闰年)

实例2:找到1000以内所有的素数,并且保存到数组中去

实例3:实现一个学生类,需要包含姓名、性别、学号和年龄等属性

实例4:抽象类的继承


1. 配置java编译环境

 针对Windows64位: 

    链接:https://pan.baidu.com/s/1q7p6YbKSyxl4k90DEeBQVw 
    提取码:fwmy

 (1)安装配置jdk

   通过以下步骤配置PATH环境变量:

(2)下载、安装IntelliJ IDEA

   两种模式下的视图转换:File — settings — color Scheme(Default与Darcula)

(3)建立java源代码输出“Hello World”

public class Hello {
    public static void main(String[] args){
       System.out.println("Hello World.");
    }
}
Hello World.

Process finished with exit code 0

(4)通过命令提示窗口运行

  • 命令javac和java都是JDK软件包自带的,通过javac命令产生一个.class文件。

2. java基本语法

(1)java程序的构成

  • 逻辑构成

    程序头包的引用:主要引用JDK软件包自带的包,也可以是自己定义的类,引用之后程序体中就可以自由应用包中的类的方法与属性。

    类的定义:可以有多个类的定义,但必须有一个主类,这个主类是程序运行的路口点,在java源程序中,主类的名字同文件名一致。

  • 物理构成

   语句一行以分号结束。

   括号{}界定语句序列。

   空白指的是语句之间、块内部、或者块之间的空白行。

  • 注释语句

行注释以//开始的行。

块注释以/*...*/开始和结束。

  • 标识符、关键字和转义符

标识符:

有字母、数字、下划线(_)、美元符号组成,其中美元符号用的比较少。

标识符从一个字母、下划线、美元符号开始。

java语言中对大小写比较敏感。

标识符没有最大长度限制。

标识符定义不能是关键字。

关键字:

java语言中自带的用于标志数据类型名(如:double)。

转义符:

拥有特殊含义的字符见下表。

(2)数据类型

  • java数据类型

  • 整数类

采用三种进制:十六进制、八进制、十进制。

十进制:2

八进制:o45

十六进制:oxBACA

具有缺省int。

用字母L或l表示长整型。

所有java中编译语言中的整数类型都是有符号的数字。

  • 文本类

必须包含单引号引用的文字。

代表一个16 bit Unicode字符。

  • 浮点类

默认类型为double,有f和d两种形式。

  • 逻辑类

boolean数据类型有两种:true和false

如:boolean f=true;

(3)变量与常量

  • 常量:是指整个运行过程中不在发生改变的量。
  • 变量:变量得声明也指变量的创建。

(4)运算符和表达式

  • 算术运算符

+(加)、-(减)、*(乘)、/(除)、%(取模运算)、++(增量运算符)、--(减量运算符)

  • 关系运算符

==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)

  • 布尔逻辑运算符

  • 位运算符

~(位求反)、&(按位与)、|(按位或)、^(按位异或)、<<(左移)、>>(右移)、>>>(不带符号右移)

  • 赋值运算符

  • 其它操作符及其表达式

三目运算符:(?:):

表达式:x?y:z;

判断x是否为真,如果为真则选y,如果为假则选z。

对象运算符:instanceof

  • 优先级

3. 流程控制与数组

(1)if-else语句

if(布尔表达式)

{

语句块1;

}

else

{

语句块2;

}

布尔表达式:返回为true时,执行语句1;返回为false时,执行语句2;

(2)switch语句

switch(表达式1)
{
case 表达式2:
    语句;
    break;
case 表达式3:
    语句;
    break;
default:
    语句;
    break;
}
  • 表达式1的值必须与整型兼容。
  • break表示要跳出这一分支。
  • case分支要执行程序语句。

(3)for循环语句

for(初始化表达式;测试表达式;步长){

语句;

}

  • 首先运行初始化表达式。
  • 然后计算测试表达式,为真时,执行语句块,如果为假,结束for循环。
  • 最后执行步长。

(4)while循环

while(布尔表达式){

语句;

}

布尔表达式为true执行语句,否则跳出。

(5)do语句

do{

语句;

}while(布尔表达式);

(6)数组

  • 首先是一个对象。
  • 存放相同的数据类型。
  • 所有数组下标默认值0开始,且访问时候不可以超出定义上限。
  • 声明格式

   数据类型 标识符[]

   如:int tab[];声明数据类型为整型的数组tab。

  • 创建数组

   由于数组是一个对象,所以用关键字new来创建一个数组。

tab=new int[10]; 创建存储10个整型数据的数组tab。

   创建完成后,赋值:

  • 每个元素赋值:tab[0]=1

                                tab[1]=3;

                                 .......

                                tab[9]=9;

  • 直接声明的时候说明其值

    int tab[]={1,2,3,4,5}; 

4. 类

(1)类的定义与声明

  • java编程是面向对象的,处理最小的完整单元为对象。
  • 类由类声明和类体构成,类体又有变量和方法构成。
  • 类声明的基本格式

   访问说明符 class 类名 extends 超类名 implements 接口名

  • 访问说明符public或者省略。
  • 类名:用户自定义类名。
  • 超类名:是指已经存在的类名。
  • 接口名:接口
  • 类体

   成员变量格式:访问说明符 数据类型 变量名

  • 访问说明符有:public、private、protected。
  • public:省略时候默认的公有类型。可以由外部对象进行访问。
  • private:私有类型,只允许在类的内部的方法和使用,若从外部访问,则需要建立函数,间接的访问。
  • protected:受保护类型,子类访问受到控制。

方法:类的操作定义,标志着类的动态特征。

访问说明符 数据类型 方法名(数据类型1 变量名1,数据类型2 变量名2)

  • 使用new进行创建类

(2)类的单继承性

  java语言中允许用externs关键字从一个类扩展出一个新类,新类继承超类的成员变量和方法,并且可以覆盖。

(3)特殊变量

  两个特殊变量:super和this

  • super

  类声明中用关键字extends扩展了其超类后,super用在扩展类中引用其它超类中的成员变量。

  • this

   指向当前变量或者实例。

(4)构造函数

  类中的构造函数用来初始化一个类。

(5)包

声明包的格式:Package 包名;

Package为关键字,包名为标识符。

Package语句要作为程序非注释语句的第一行。

包内的类名唯一。

引用包中类时,使用import语句。格式import 包名.类名

5. 集合类的使用

(1)List接口

  • List接口

    List接口扩展了Collection,可以包含重复元素。元素是有顺序的,每个元素都有一个index值(从0开始)标明元素在列表中的位置。在声明时可以带有一个泛型参数,即List<E> 。实现List接口的主要类有Vector、ArrayList和LinkedList等。Vector和ArrayList以类似数组的形式进行存储,因此它的随机访问速度极快。LinkedList的内部实现是链表,适合于在链表中间需要频繁进行插入和删除操作。

ArrayList/Vector常用方法:

  • void add(Object obj) ,添加一个对象
  • boolean addAll(Collection col),添加整个集合,如果接收者对象的结果有变化,则返回true
  • int size() ,返回元素的个数。
  • boolean isEmpty(),如果不含元素,则返回true
  • Object get(int pos),返回指定位置的元素
  • void set(int pos, Object obj),用参数对象替换指定位置的对象
  • boolean remove(Object obj),去除给定对象的第一次出现,如果找到了对象,则返回true。去除一个对象后,其后面的所有对象都依次向前移动。
  • Object remove(int pos),去除给定位置的元素,并返回被去除的对象
  • boolean removeAll(Collection<?> col),从接收者对象中去除所有在参数对象中出现的元素,如果接收者对象的结果有变化,则返回true
  • void clear() ,去除所有的元素
  • boolean contains(Object obj),返回是否包含指定的对象,如果包含则返回true;否则,返回false
  • boolean containsAll(Collection<?> col),返回是否包含参数col中的所有对象
  • int indexOf(Object obj),返回给定对象在Vector /ArrayList中第一次出现的位置,如不存在,则返回-1

(2)Set接口

  • Set接口

Set接口扩展了Collection接口,禁止重复的元素,是数学中“集合”的抽象。实现它的两个主要类是哈希集合(HashSet)及树集合(TreeSet)。

(3)Map接口

  • Map接口

Map用于存储“关键字”(key)和“值”(value)的元素对,其中每个键映射到一个值,当需要通过关键字实现对值的快速存取时使用。两个主要实现类:TreeMap、HashMap。

Map接口常用方法:

  • int size(),返回Map中的元素个数
  • boolean isEmpty(),返回Map中是否包含元素,如不包括任何元素,则返回true
  • boolean containsKey(Object key),判断给定的参数是否是Map中的一个关键字(key)
  • boolean containsValue(Object val),判断给定的参数是否是Map中的一个值(value)
  • Object get(Object key),返回Map中与给定关键字相关联的值(value)
  • Collection values(),返回包含Map中所有值(value)的Collection对象
  • Set keySet(),返回包含Map中所有关键字(key)的Set对象
  • Set entrySet(),返回包含Map中所有项的Set对象
  • Object put(Object key, Object val),将给定的关键字(key)/值(value)对加入到Map对象中。其中关键字(key)必须唯一,否则,新加入的值会取代Map对象中已有的值
  • void putAll(Map m),将给定的参数Map中的所有项加入到接收者Map对象中
  • Object remove(Object key),将关键字为给定参数的项从Map对象中删除
  • void clear(),从Map对象中删除所有的项

(4)Iterator接口

  • Iterator接口

Iterator接口是一个遍历集合元素的工具,并具有从正在遍历的集合中去除对象的能力。具有如下三个实例方法, 

  • hasNext(),判断是否还有元素
  • next(),取得下一个元素
  • remove(),去除一个元素。注意是从集合中去除最后调用next()返回的元素,而不是从Iterator类中去除

(5)Collections类

  • Collections类

Collections类提供了对集合的操作,包括

  • 排序算法sort

对List重新排序,使其中的元素按照某种次序关系升序排列。有两种形式,简单形式只是将元素按照自然次序排列,第二种形式需要一个附加的Comparator对象作为参数,用于规定比较规则,可用于实现反序或特殊次序排序。

  • 洗牌算法shuffle

其作用与排序算法恰好相反,它打乱List中的任何次序。也就是说以随机方式重排元素,任何次序出现的几率都是相等的。在实现偶然性游戏的时候,这个算法很有用。

  • reverse:将一个List中的元素反向排列
  • fill:用指定的值覆写List中的每一个元素,这个操作在重新初始化List时有用

copy:接受两个参数,目标List和源List,将源中的元素复制到目标,覆写其中的内容。目标List必须至少与源一样长,如果更长,则多余的部分内容不受影响。

实例1:使用switch结构计算每个月的天数(考虑闰年)

(1)解析

  闰年是可以整除4,但不可以整除100的数,或者直接可以整除400。

  java.util.Scanner是Java5的新特征,主要功能是简化文本扫描、获取控制台输入。

  通过new Scanner(Sysem.in)创建一个Scanner,控制台会一直等待输入,直到敲回车结束,把所输入的内容传给Scanner,作为扫描对象。

 next() 每次取到一个间隔符前面的数据。  

 nextInt() 是取next() 然后把字符串解析成一个int数字。

 英语:闰年(Leap year)

(2)代码实现

import java.util.Scanner;
public class test {
    //判断是否为闰年
    public static boolean isLeapyear(int year){
     return((year%4==0)&&(year%100!=0)||(year%400==0));
    }

    //输出具体年份月份的天数
    public static int days(int year,int month){
        int day;
        switch(month){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
                 day=31;
                 break;
            case 2:day=isLeapyear(year)?29:28;
                 break;
            default:
                day=30;
                break;

        }
        return day;
    }

    //程序执行开始
    public static void main(String[] args){
        int year,month;
        Scanner s=new Scanner(System.in);
        System.out.print("请输入年份:");
        year=s.nextInt();
        System.out.print("请输入月份:");
        month=s.nextInt();
        System.out.print(year+"年"+month+"月的天数是"+(days(year,month)));
    }
}

(3)结果展示

请输入年份:2020
请输入月份:4
2020年4月的天数是30
Process finished with exit code 0

实例2:找到1000以内所有的素数,并且保存到数组中去

(1)解析

质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数,质数也称为素数。通过循环遍历2至n/2,若中间的任意一个数能被n整除,则n不是质数,返回false;若所有的数均不能被n整除,则返回true。

英语:素数(prime)

(2)代码实现

public class text1 {
    //判断给定的数是不是素数
    public static boolean isprime(int n){
        int i;
        for(i=2;i<=n/2;i++){
            if((n%i)==0){
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args){
        int[] primes=new int[1000];
        int i,count=0,j;
        for(i=2;i<=1000;i++){
            if(isprime(i))
            {
              primes[count]=i;
              count++;
            }
        }

        for(j=0;j<count;j++){
            System.out.println(primes[j]);
        }

    }
}

实例3:实现一个学生类,需要包含姓名、性别、学号和年龄等属性

(1)题目要求 

题目:实现一个学生类,需要包含姓名、性别、学号和年龄等属性。要求:

  1. 无参数和有参数的构造函数
  2. 各个属性(不包括学号)的set和get方法
  3. 使用类变量实现学号的自增
  4. 使用枚举类型表示性别
  5. 实现toString()方法
  6. 编写main函数进行测试

(2)代码实现

  枚举类型:Gender.java

public enum Gender {
    MALE,
    FEMALE
}

  实现要求:Student.java

public class Student {
    private String name;
    private int no;
    private int age;
    private Gender g;
    private static int count=0;

    public String getName(){
        return name;
    }
    public String setName(String name){
        return this.name=name;
    }

    public int getAge(){
        return age;
    }
    public int setAgeint (int age){
        return this.age=age;
    }

    public Gender getG(){
        return g;
    }
    public void setG(Gender g){
        this.g=g;
    }

    public int getNo(){
        return no;
    }

    Student(String name,int age,Gender g){
        this.name=name;
        this.age=age;
        this.g=g;
        count++;
        no=count;
    }
    Student(){
        this("",18,Gender.MALE);
    }

    public String toString(){
        return name+","+g+","+age+","+no;
    }
}

  测试代码:text.java

public class text {
    public static void main(String[] args){
        Student s1=new Student("zhang san",20,Gender.MALE);
        Student s2=new Student("li hong",21,Gender.FEMALE);
        Student s3=new Student("wang ming",23,Gender.MALE);

        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
    }
}

  运行结果:

zhang san,MALE,20,1
li hong,FEMALE,21,2
wang ming,MALE,23,3

Process finished with exit code 0

实例4:抽象类的继承

(1)题目

题目:抽象类的继承

  1. 编写抽象类Shape,包含抽象方法void draw()。
  2. 从类Shape派生两个类Rectangle和Circle。
  3. 在main函数中分别实例化Rectangle和Circle的对象,赋值给Shape类的引用变量,并调用其draw方法。

(2)实现过程

  • 新建一个工程,命名为Shape。
  • 在工程中新建一个类,命名为Shape,Shape类为抽象类,包含抽象方法draw,实现代码为:
public abstract class Shape {
    abstract void draw();
}
  • 新建Rectangle类,从Shape类派生并实现抽象方法draw,实现代码为:
public class Rectangle extends Shape {
    void draw(){
        System.out.println("Draw rectangle.");
    }
}
  • 新建Circle类,从Shape类派生并实现抽象方法draw,实现代码为:
public class Circle extends Shape {
    void draw(){
        System.out.println("Draw circle.");
    }
}
  • 新建ShapeTester类,此类是本工程的主类,包含程序入口函数main,实现代码为:
public class ShapeTester {
    public static void main(String[] args){
        Shape s=new Rectangle();
        s.draw();
        Shape r=new Circle();
        r.draw();
    }
}

(3)结果显示

Draw rectangle.
Draw circle.

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/fanjufei123456/article/details/105504426