小言_互联网的博客

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

341人阅读  评论(0)

目录

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”


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

  
  1. Hello World.
  2. 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语句


  
  1. switch(表达式 1
  2. {
  3. case 表达式 2:
  4. 语句;
  5. break
  6. case 表达式 3:
  7. 语句;
  8. break
  9. default:
  10. 语句;
  11. break;
  12. }
  • 表达式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)代码实现


  
  1. import java.util.Scanner;
  2. public class test {
  3. //判断是否为闰年
  4. public static boolean isLeapyear(int year){
  5. return((year% 4== 0)&&(year% 100!= 0)||(year% 400== 0));
  6. }
  7. //输出具体年份月份的天数
  8. public static int days(int year,int month){
  9. int day;
  10. switch(month){
  11. case 1:
  12. case 3:
  13. case 5:
  14. case 7:
  15. case 8:
  16. case 10:
  17. day= 31;
  18. break;
  19. case 2:day=isLeapyear(year)? 29: 28;
  20. break;
  21. default:
  22. day= 30;
  23. break;
  24. }
  25. return day;
  26. }
  27. //程序执行开始
  28. public static void main(String[] args){
  29. int year,month;
  30. Scanner s= new Scanner(System. in);
  31. System. out.print( "请输入年份:");
  32. year=s.nextInt();
  33. System. out.print( "请输入月份:");
  34. month=s.nextInt();
  35. System. out.print(year+ "年"+month+ "月的天数是"+(days(year,month)));
  36. }
  37. }

(3)结果展示


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

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

(1)解析

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

英语:素数(prime)

(2)代码实现


  
  1. public class text1 {
  2. //判断给定的数是不是素数
  3. public static boolean isprime(int n){
  4. int i;
  5. for(i= 2;i<=n/ 2;i++){
  6. if((n%i)== 0){
  7. return false;
  8. }
  9. }
  10. return true;
  11. }
  12. public static void main(String[] args){
  13. int[] primes= new int[ 1000];
  14. int i,count= 0,j;
  15. for(i= 2;i<= 1000;i++){
  16. if(isprime(i))
  17. {
  18. primes[count]=i;
  19. count++;
  20. }
  21. }
  22. for(j= 0;j<count;j++){
  23. System.out.println(primes[j]);
  24. }
  25. }
  26. }

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

(1)题目要求 

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

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

(2)代码实现

  枚举类型:Gender.java


  
  1. public enum Gender {
  2. MALE,
  3. FEMALE
  4. }

  实现要求:Student.java


  
  1. public class Student {
  2. private String name;
  3. private int no;
  4. private int age;
  5. private Gender g;
  6. private static int count= 0;
  7. public String getName(){
  8. return name;
  9. }
  10. public String setName(String name){
  11. return this.name=name;
  12. }
  13. public int getAge(){
  14. return age;
  15. }
  16. public int setAgeint (int age){
  17. return this.age=age;
  18. }
  19. public Gender getG(){
  20. return g;
  21. }
  22. public void setG(Gender g){
  23. this.g=g;
  24. }
  25. public int getNo(){
  26. return no;
  27. }
  28. Student(String name, int age,Gender g){
  29. this.name=name;
  30. this.age=age;
  31. this.g=g;
  32. count++;
  33. no=count;
  34. }
  35. Student(){
  36. this( "", 18,Gender.MALE);
  37. }
  38. public String toString(){
  39. return name+ ","+g+ ","+age+ ","+no;
  40. }
  41. }

  测试代码:text.java


  
  1. public class text {
  2. public static void main(String[] args){
  3. Student s1= new Student( "zhang san", 20,Gender.MALE);
  4. Student s2= new Student( "li hong", 21,Gender.FEMALE);
  5. Student s3= new Student( "wang ming", 23,Gender.MALE);
  6. System. out.println(s1);
  7. System. out.println(s2);
  8. System. out.println(s3);
  9. }
  10. }

  运行结果:


  
  1. zhang san,MALE, 20, 1
  2. li hong,FEMALE, 21, 2
  3. wang ming,MALE, 23, 3
  4. 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,实现代码为:

  
  1. public abstract class Shape {
  2. abstract void draw();
  3. }
  • 新建Rectangle类,从Shape类派生并实现抽象方法draw,实现代码为:

  
  1. public class Rectangle extends Shape {
  2. void draw(){
  3. System.out.println( "Draw rectangle.");
  4. }
  5. }
  • 新建Circle类,从Shape类派生并实现抽象方法draw,实现代码为:

  
  1. public class Circle extends Shape {
  2. void draw(){
  3. System.out.println( "Draw circle.");
  4. }
  5. }
  • 新建ShapeTester类,此类是本工程的主类,包含程序入口函数main,实现代码为:

  
  1. public class ShapeTester {
  2. public static void main(String[] args){
  3. Shape s= new Rectangle();
  4. s.draw();
  5. Shape r= new Circle();
  6. r.draw();
  7. }
  8. }

(3)结果显示


  
  1. Draw rectangle.
  2. Draw circle.
  3. Process finished with exit code 0

 


转载:https://blog.csdn.net/fanjufei123456/article/details/105504426
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场