Java-概念与安装

概念

JDK:java程序开发工具包,包含JRE和开发人员使用的工具(相当于.NET SDK)
JRE:是Java程序运行时环境,包含JVM和运行需要的核心类库(相当于.NET Runtime)
JVM:JVM虚拟机(Java Virtual Machine)是Java程序的运行环境,通过模拟计算机硬件(如处理器、堆栈、寄存器等)和操作系统功能,实现跨平台执行Java字节码(.class文件)。核心作用是跨平台

Java开发安装

安装JDK,进入官网https://www.oracle.com/developer/
找到java下载,选择windows,版本17,下载:jdk-17.0.15_windows-x64_bin.exe
添加JAVA_HOME环境变量,添加path环境变量

Java开发步骤

Java程序开发三步骤:编写、编译、运行。
·将Java代码编写到扩展名为的源文件中 ·通过javac.exe命令对该java文件进行编译,生成一个或多个字节码文件(.class文件) ·通过java.exe`命令对生成的class文件进行运行

命令

javac命令:编译程序
java命令:运行程序

IDE安装

IDEA,全程IntelliJ IDEA。下载网址: https://www.jetbrains.com/idea/download/#section=windows
Eclipse(老工具,不推荐)

项目结构

层级关系:

project(工程) - module(模块) - package(包) - class(类)

project类似.net中的解决方案
module类似.net中的项目
package类似.net中的命名空间,但是package更强调物理隔离,C#命名空间侧重逻辑分组

package、import

package 包名:为类指定包名
import 包名.类名:引入包

JDK中主要的包介绍

java.lang ----包含一些Java语言的核心类,如String、Math、Integer、 System和Thread,提供常用功能
java.net ----包含执行与网络相关的操作的类和接口。
java.io ----包含能提供多种输入/输出功能的类。
java.util ----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。
java.text ----包含了一些java格式化相关的类
java.sql ----包含了java进行JDBC数据库编程的相关类/接口

可变个数参数方法

类似c#中的params参数

public static void Show(String...books)
    {
        for (int i=0;i<books.length;i++){
            System.out.println(books[i]);
        }
    }
	
Show("水浒传","三国演义");

面向对象

构造函数调用另一个构造函数

public Student(String name) {
	this();//调用本类无参构造器,this()只能在构造器首行
	this.name = name;
}
	
//.net中如下调用
 public Person(string name) : this(name, 0) { }

类继承:

[修饰符] class 类B extends 类A {
    ...
}

方法重写:

@Override
    public void showNum(){
        System.out.println("显示来电姓名,头像");
    }

super:
相当于.net中的base,调用父类成员

public class SmartPhone extends Phone{

    SmartPhone(){
        super();//调用父类构造函数
    }
    //重写父类的来电显示功能的方法
    public void showNum(){
        System.out.println("显示来电姓名");

        //保留父类来电显示号码的功能
        super.showNum();//此处必须加super.,否则就是无限递归,那么就会栈内存溢出
    }
}

接口(interface)

public interface USB3{
    //静态常量
    long MAX_SPEED = 500*1024*1024;//500MB/s

    //抽象方法
    void in();
    void out();

    //默认方法
    default void start(){
        System.out.println("开始");
    }
    default void stop(){
        System.out.println("结束");
    }

    //静态方法
    static void show(){
        System.out.println("USB 3.0可以同步全速地进行读写操作");
    }
}

实现接口:

class 类名 implements 接口1,接口2,接口3。。。{
    // 重写接口中所有抽象方法【必须】,当然如果实现类是抽象类,那么可以不重写
      // 重写接口中默认方法【可选】
}

final修饰符
final修饰类,表示这个类不能被继承,和c#中sealed作用一样
final修饰方法,表示这个方法不能被子类重写
final修饰变量,一旦赋值,它的值只能在构造函数中被修改。和c#中readonly作用一样
final修饰方法局部变量,只读

instanceof:
相当于.net中的is,校验类型

if(pet instanceof Cat){
	Cat cat = (Cat) pet;
	cat.catchMouse();
}

java.lang.Object:
java.lang.Object是类层次结构的根类,即所有其它类的父类。

getClass方法
类似.net中的GetType()方法

Sub s = new Sub();
var c = s.getClass();

static:
java中静态成员可以通过类名也可以通过对象名调用,与.net不同

代码块
代码块分静态代码块,和非静态代码块。
静态代码块和c#中的静态构造函数相同,在类加载时执行,只执行一次;非静态代码块在类实例化时执行。

class Sub extends Base {
    public static int TOTAL=0;
    public int count = 0;
    static{
        System.out.println("静态代码块执行");
        TOTAL=3;
    }

    {
        System.out.println("非静态代码块执行");
        this.count=50;//注意非静态代码块要写在属性之后
    }
    public void display() {
        System.out.println(this.count);
    }
}

枚举

//简单枚举
public enum Week {
    MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;
}

//带方法的枚举
public enum SeasonEnum {
    SPRING("春天","春风又绿江南岸"),
    SUMMER("夏天","映日荷花别样红"),
    AUTUMN("秋天","秋水共长天一色"),
    WINTER("冬天","窗含西岭千秋雪");

    private final String seasonName;
    private final String seasonDesc;

    private SeasonEnum(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }
}

System.out.println( Week.MONDAY);
System.out.println( SeasonEnum.SPRING);
System.out.println( SeasonEnum.SPRING.getSeasonDesc());

switch (week){
	case MONDAY:
		System.out.println("怀念周末,困意很浓");break;
	case TUESDAY:
		System.out.println("进入学习状态");break;
}

enum中常用方法

String toString(): 默认返回的是常量名(对象名),可以继续手动重写该方法!
static 枚举类型[] values():返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值,是一个静态方法
static 枚举类型 valueOf(String name):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。
String name():得到当前枚举常量的名称。建议优先使用toString()。
int ordinal():返回当前枚举常量的次序号,默认从0开始
Week[] values = Week.values();
        for (int i = 0; i < values.length; i++) {
            //ordinal()、name()
            System.out.println((values[i].ordinal()+1) + "->" + values[i].name());
        }

注解(Annotation)
注解就是c#中的Attribute
常用的注解:
@Override: 限定重写父类方法,该注解只能用于方法
@Deprecated: 用于表示所修饰的元素(类,方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择
@SuppressWarnings: 抑制编译器警告
生成文档相关的注解:

@author 标明开发该类模块的作者,多个作者之间使用,分割
@version 标明该类模块的版本
@see 参考转向,也就是相关主题
@since 从哪个版本开始增加的
@param 对方法中某参数的说明,如果没有参数就不能写
@return 对方法返回值的说明,如果方法的返回值类型是void就不能写
@exception 对方法可能抛出的异常进行说明 ,如果方法没有用throws显式抛出的异常就不能写

元注解

package java.lang;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
    String[] value();
}

Idea快捷键

提高编写速度

说明 快捷键
智能提示-edit alt + enter
使用xx块环绕-surround with ... ctrl+alt+t
调出生成getter/setter/构造器等结构-generate ... alt+insert
方法的形参列表提醒-parameter info ctrl+p
批量修改指定的变量名、方法名、类名等-rename shift+f6
抽取代码重构方法-extract method ... ctrl+alt+m
重写父类的方法-override methods ... ctrl+o
实现接口的方法-implements methods ... ctrl+i
选中的结构的大小写的切换-toggle case ctrl+shift+u
批量导包-optimize imports ctrl+alt+o

类结构、查找和查看源码

说明 快捷键
如何查看源码-go to class... ctrl + 选中指定的结构 或 ctrl+n
显示当前类结构,支持搜索指定的方法、属性等-file structure ctrl+f12
退回到前一个编辑的页面-back ctrl+alt+←
进入到下一个编辑的页面-forward ctrl+alt+→
打开的类文件之间切换-select previous/next tab alt+←/→
光标选中指定的类,查看继承树结构-Type Hierarchy ctrl+h
查看方法文档-quick documentation ctrl+q
类的UML关系图-show uml popup ctrl+alt+u
定位某行-go to line/column ctrl+g
回溯变量或方法的来源-go to implementation(s) ctrl+alt+b
折叠方法实现-collapse all ctrl+shift+ -
展开方法实现-expand all ctrl+shift+ +

查找、替换与关闭

说明 快捷键
查找指定的结构 ctlr+f
快速查找:选中的Word快速定位到下一个-find next ctrl+l
查找与替换-replace ctrl+r
查询当前元素在当前文件中的引用,然后按 F3 可以选择 ctrl+f7
全项目搜索文本-find in path ... ctrl+shift+f
关闭当前窗口-close ctrl+f4

调整格式

说明 快捷键
格式化代码-reformat code ctrl+alt+l
使用单行注释-comment with line comment ctrl + /
使用/取消多行注释-comment with block comment ctrl + shift + /
选中数行,整体往后移动-tab tab
选中数行,整体往前移动-prev tab shift + tab

Debug快捷键

说明 快捷键
单步调试(不进入函数内部)- step over F8
单步调试(进入函数内部)- step into F7
强制单步调试(进入函数内部) - force step into alt+shift+f7
选择要进入的函数 - smart step into shift + F7
跳出函数 - step out shift + F8
运行到断点 - run to cursor alt + F9
继续执行,进入下一个断点或执行完程序 - resume program F9
停止 - stop Ctrl+F2
查看断点 - view breakpoints Ctrl+Shift+F8
关闭 - close Ctrl+F4

获取随机数

double d1 = Math.random();//0-1范围内的double类型的数
System.out.println("随机数:"+d1);

接受键盘输入

import java.util.Scanner;

Scanner scanner = new Scanner(System.in);//System.in默认代表键盘输入
String name = scanner.next();
System.out.println("姓名:"+name);
int age = scanner.nextInt();
System.out.println("年龄:"+age);
posted @ 2019-12-28 17:17  .Neterr  阅读(265)  评论(0)    收藏  举报