• JavaSE阶段基础内容(不包括I/O,常用类,集合)


    初始JAVA

    Write Once , Run Anywhere

    Java的三大版本

    1. JavaSE 标准版(桌面程序,控制台开发)
    2. JavaME 嵌入式开发(手机,小家电) (差不多死了)
    3. JavaEE E企业级开发(web端,服务器开发)

    从JavaSE->JavaEE

    从普通的程序代码进阶学习,打好基础。

    win10截图快捷键

    shift + win + s

    JDK JRE JVM

    JDK: java development kit (java开发者工具)

    JRE:java runtime environment (java运行环境)

    JVM:java virtual machine (java 虚拟机是跨平台的核心)

    第一个HelloWorld

    快速打开cmd方法(不用cd cd cd)

    在文件绝对路劲前加cmd+空格

    在cmd中如何运行

    javac 代表编译+文件的名称后缀

    之后 java hello 就可以运行了。 后缀.class可以省略

    注意文件名和类名一致!

    java程序运行机制

    编译型(compile):将程序全部转换为低级语言,再运行类似于笔译,翻译完整本书。

    解释型:一边翻译一遍执行,类似于口译

    当我们执行javac的时候,相当于经过Java编译器 。

    java注释

    IDEA中修改comments的颜色

    FILE->setting->Java->comments->line commnets and block comments

    单行: // 快捷键:ctrl+/

    多行:/* ----- */ 快捷键: shift + ctrl+ /

    javadoc:文档注释

    /** 
    
    *@Description HelloWorld
    
    *@Author hujesse4
    
    */
    

    java 标识符

    关键字

    所有的标识符都应该以字母(a-z或A-Z)或者$,或者_开头

    像7DDh 就是不合法的

    大小写敏感

    数据类型

    分为二类:基本类型(primitive type)和引用类型(.reference type)

    不要使用浮点数进行比较。

    布尔值拓展:

    boolean flag=true;
    if(flag==true){}
    if(flag){}
    // LESS IS MORE  代码要精简易读
    

    数据类型转换

    强制转换:(类型)变量名 高--低

    自动转换 低--高

    int i =128;
    byte b=(byte)i // 属于由高到低需要强转
    // ==========
    int i=128;
    double b=i; //  低到高
    

    由低到高的排序:

    byte->short->char->int->long->float->double
    

    小剧场:

    JDK7的新特效,数字之间可以用下划线分割

    int money=10_0000_0000 // 可以轻松看出10万 
    sout(“money”) 时也不会有什么变化
    

    String 是一个类,引用类。型

    变量作用域

    类变量

    实例变量

    局部变量

    public class Variable{
    	static int allClicks=0;     // 类变量
    	String str="helloworld";    // 实例变量
    	public void method(){
    	int i=0;          // 局部变量
    	}
    }
    

    jvav中的常量

    使用final 修饰

    static final doudle PI=3.14;
    

    变量的命名规范

    所有变量,方法,类名:见名知意。

    类成员变量:首字母小写和驼峰原则:monthSalary

    局部变量:首字母小写和驼峰原则

    常量:大写字母和下划线;MAX_GoodMan

    类名:首字母大写和驼峰原则:Man

    方法名:首字母小写和驼峰原则:run()

    运算符

    if (a instanceof b) 
    if (a!=b)
    

    只要讲一下位运算符:

    A=0011 1100
    B=0000 1101
    -------------------
    A&B=0000 1100
    A|B=0011 1101
    A^B=0011 0001
    ~B=1111 0010
    

    还有<< >>

    2*8 如何计算?
    2*2*2*2 相当于0000 0010 左移二位 -》0000 1000
    <<  左移    *2  
    >>  右移    /2
    

    字符串如何连接 ,左侧拼接

    字符串连接符 + ,String
    String c = ""+a+b;
    a=10;b=20
    c=1020;
    but 
    c=a+b+""
    c=20;
    

    三元运算符 x ? y : z

    String type = score<60?"不及格":"及格";
    

    package机制

    package = 文件file

    一般用公司域名倒置。 com.***就是这么来的

    用户交互Scanner

    java.util.Scanner 是java5的新特性 可以通过Scanner类来获取用户的输入。

    Scanner s = new Scanner(System.in);
    
    通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取之前我们一般需要使用hasNext()与hasNextLine()判断是否有输入的数据;
    
    当我们键盘输入hello world
    sout<<s.next();
    hello.
    说明next()截取空格之前的字符串。
    而s.nextLine()截取enter键之前的
    
        public static void main(String[] args) {
        // 从键盘接受数据
            Scanner scanner=new Scanner(System.in);
            // 判断是否有输入
            if(scanner.hasNextLine()){
                String str=scanner.nextLine();
                System.out.println("输出的内容位"+str);
            }
        scanner.close();
    

    流程控制

    顺序结构

    选择结构

    if单选则结构
    if双选择结构
    if多选择结构
    嵌套的if结构
    switch多选择结构

    字符的本质还是数字

    JDK7的新特性,表达式结果可以说字符串
    String name=湖
    switch(name){
    case"湖":
    cout("123");break;
    case"卡了"
    cout(12323);break;
    }
    

    IDEA实现反编译

    1.打开File->Project Structure 找到project conpiler output

    去文件夹找到.class 文件 . 复制

    2.在IDEA里!

    把复制的.class文件v到包里面下面是结果

    反编译之后呢,发现他的代码与我们自己写的不是百分百吻合

    循环结构

    while 循环
    do...while 循环
    for 循环

    print是不换行 println要换行

    for循环是最有效,最灵活的循环结构
    
    
    在IDEA中,可以使用100.for快速生成for循环
    
    100.for = for(int i=0;i<100;i++){}
    
    打印99乘法表
    /*
    1*1=1
    1*2=2	2*2=4
    ---------------
    1*9=9 -----------------9*9=81
    ============================
             for (int i=1;i<10;i++){
                 for (int j=1;j<=i;j++)
                     System.out.print(j+"*"+i+"="+i*j+"	");
                 System.out.println();
             }
    
    增强for循环

    主要用于数组或集合的增强for循环

    for (Type x : array)

    int [] array={10,20,30,40,15};
    for (int x:array){
    sout(x)    //    
    }
    
    Break Continue
    break 用于强行退出循环,不执行循环中剩余的语句
    
    continue 用于跳出循环体尚未执行的语句
    while(i<100)
    if (i%10==0){
    sout(i);
    continue
    }
    此时10的倍数就不会输出,程序也不会终止
    
    打印三角形
     for (int i = 1; i <= 5; i++) {
                for (int j=5;j>=i;j--)
                 System.out.print(" ");
                for (int j=1;j<=i;j++)
                   System.out.print("*");
                for (int j=1;j<i;j++)
                   System.out.print("*");
                System.out.println();
            }
    打印空串!
    

    方法

    何谓方法

    拿System.out.println() 来分析,System是系统的一个类,out是一个System的输出对象,println()是一个方法。

    调用系统类里面的标准输出对象out中的println方法

    方法就是函数的意思
    
    方法的定义及调用

    方法重载
    命令行传参
    package com.hujesse.Scanner;
    public class forDemo04 {
        public static void main(String[] args) {
            for (int i = 0; i < args.length; i++) {
                System.out.println(args[i]);
            }
    
        }
    }
    

    通过命令行的方式进入demo04 javac进行编译

    然后返回src目录。因为包的关系

    可变参数

    最重要的递归

    递归就是:A方法调用A方法!自己调用自己

    public static int f(int n){
    	if(n==1) return 1
    	else
    	return n*f(n-1);
    
    }
    

    能不用递归就不要用递归

    数组

    数组概述

    数组是相同数据类型的有序集合

    数组描述的是相同类型的若干个数据,按照一定的先后次序排序组合而成 每个数据称为一个数组元素,可以通过下标来访问

    数组声明创建
    dataType[] arrayRefVar;   // 首选的方法
    dataType arrayRefVar[];   // 相同的方法,但不是首选
    
    java语言使用new操作符来创建数组,语法如下:
    dataType[] arrayRefVar = new dataType[arraySize];
    int [] nums = new int[10]
    
    数组的元素是通过索引访问的,数组索引从0开始
    获取数组长度: arrays.length
    

    内存分析

    对于八种基本数据类型,byte,short,int,long,float,double,char,boolean 这八种类型存储时是存储在内存中的 栈内存中,而引用数据类型,如类类型,数组类型,对象类型的值是存在内存中的堆内存中


    数组本身就是对象,因为数组也是new出来的。java中的对象是在堆中的。

    数组使用(初始化)
    //静态初始化
    int []a = {1,2,3,4,5};
    // 动态初始化
    int b[] = new int[10];
    如果没赋值,隐式值为0
    
    数组的遍历
    1. foreach循环,idea中快捷键为数组名.fro
    2.普通for循环
    * 数组作方法传参
    *数组作返回值
    
    多维数组
    定义:int a[][]=new int[2][5];
    和c++相比真的简单太多了不用二次new,还要最终销毁
    
    Arrays类
    数组的工具类java.util.Arrays,API中提供了一个工具类Arrays供我们使用
    查看JDK帮助文档
    Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用
    ========================
    具有一下常用功能
    1.给数组赋值:通过fill方法
    2.对数组排序:通过sort方法,按升速
    3.比较数组,通过equals方法比较数组中元素值是否相等
    4.查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找
    
    稀疏数组

    对象

    什么是面向对象

    本质:以类的方式组织代码,以对象的形式组织(封装)数据

    先有对象后有类。对象是具体的事物,类是抽象的,对对象的抽象

    三大特性:封装,继承,多态

    this
    public class Student{
    	String name;
    	int age;
    	public void study(){
    		sout(this.name+"在学习");
    	}
    }
    
    this 代表当前对象
    

    类是抽象的,需要用new来实例化一个对象。、

    修饰符的范围:
    public > protected > Default > private
    
    构造器

    分为有参和无参,目的是为了初始化对象。快捷键alt+insert 可以快速生成构造方法。

    1. 和类名相同
    2.没有返回值
    作用:new本质在调用构造方法。初始化对象的值
    
    
    创建对象内存分析

    注意:方法区也是堆的一部分。
    
    封装(数据的隐藏)

    1.设计程序要“高内聚,低耦合”高内聚就是类的内部数据操作自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用

    2.(封装)数据的隐藏

    通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问。即私有属性,get/set

    set 方法也可以进行值的校验
    public void setAge(int age){
    	if (age>120||age<0)
    		this.age=0;      // 当年龄不合法
    	else
    		this.age=age       // 合法
    }
    
    继承(extends)

    JAVA类中只要单继承,没有多继承。

    继承是类和类之间的一种关系。初次之外,类和类之间的关系还有依赖,组合,聚合等

    子类(派生类)继承父类 is a 的关系

    1.Object类

    ctrl + h 可以打开一个继承树
    
    java所有的类,都默认直接或间接继承Object
    such as
    public class person /* extends Object */
    	{
    
    		}	
    

    2.super

    spuer 注意点
    1. super调用父类的构造方法,必须在构造方法的第一个
    2.spuer必须只能出现在子类的构造方法中。
    3.super和this不能同时调用构造方法
    不同:
    this=本身调用者
    super=父类对象
    构造方法:
    this(); 本类的构造;
    super(); 父类的构造;
    

    3.方法重写==》 多态

    给出父类B,子类A

    public class B{
    	public static void test(){
    		Sout("B=>test");
    	}
    }
    
    public class A extends B{
    	public static void test(){
    		Sout("A=>test");
    	}
    }
    

    Application.java

    psvm{
    	A a = new A();
    	a.test();        // 输出为A=>test
    	B b = new A();
    	b.test();      // 输出为B=>test 但如果A,B二个类的方法没有static,则 输出为A=>test
    }
    

    父类的调用指向子类.

    只有非静态方法才叫重写!!
    
    只要子类继承了父类才有重写这一说法。
    
    为什么需要重写: 父类的功能子类不一定需要,或者不一定满足
    
    多态·
    既同一方法可以根据发送对象的不同而采取不同的行为方式
    1.父类引用指向子类的对象
    2.把子类转换为父类,向上转型
    3.把父类转换为子类,向下转型4,强制转换
    
    

    static关键字

    代码块执行次序

    public class demo{
    {
    	sout("默认代码块")
    	}
    static{
    		sout("静态代码块")
            }
    public person(){
    		sout("构造方法")
    	}	
    psvm{
    		Person pers = new person();
    	}
    }
    输出的是静态-》默认=》构造代码块
    static只执行一次,随类一起加载,static的东西加载到堆里面的静态资源区
    

    static nb的地方

    抽象(abstract)类

    使用:在类和方法前加abstract修饰符

    如果子类继承了一个抽象类,那么子类必须实现父类所有的抽象方法。

    类是单继承,但接口可以多继承
    
    1. 不能new一个abstract类,只能靠子类去实现;约束!
    2.抽象类可以写普通的方法。
    3.抽象方法必须在抽象类中。
    

    接口

    普通类:只要具体实现
    抽象类:具体实现和规范(抽象方法)都有
    接口:只要规范!
    
    定义接口的时候,如
    public interface UserService{
    		public abstract void run(); 
    	}
    // 其实public 和abstract都是被省略了的
    
    多继承:
    public class UserService implements UserService,TimeService
    可以继承多个
    
    接口与抽象类的区别:
    1. 接口使用interface 和 implements   可以多继承
    2.抽象类使用 abstract 和 extends     只能单继承
    

    内部类

    public class Outer{
    	private int id;
    	public void out(){
    		sout("这是外部类");
    	
    	public class Inner{
    			public void in(){
    					sout("这是内部类");
    				}
    		}
    	
    	}
    }
    
    psvm{
    	Outer outer = new Outer();
    	Outer.Inner inner = outer.new Inner();
    	inner.in();
    	}
    

    很抽象的实例化内部类。

    一个java文件中,可以有多个class类,只能有一个public。
    

    Error and Expection

    什么是异常

    异常:Exception ,程序运行过程中,非常可能遇到刚刚提到的这些异常问题。

    Error与Exception的区别:Error通常是灾难性的致命错误,是程序无法控制和处理的,当出现这些异常时,JVM一般会选择终止线程;Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常。
    
    异常体系结构
    java异常处理机制
    抛出异常
    捕获异常
    异常处理五个关键字:
    	try,catch,finally,throw,throws
    选中代码之后,alt+ctrl+T可以操作
    
                int a =1;
                int b = 0;
                try {    // try代码块是一个监控区域
                    System.out.println(a/b);
                }catch (Exception e){    // 捕获异常
                    System.out.println("程序出现异常变量不能为0");
                }finally {
                    System.out.println("finally");
                }  // finally可以不要,但一般用来处理I/0,资源的关闭。
    
    主动抛出异常  // 一般在方法中使用
    public void test(int a,int b){
    		if (b==0)
    			throw new Exception();   // 主动的抛出异常
    	}
    }
    throws在方法上使用:
    public void test throws Exception{};
    
    自定义异常
    总结

    英文单词笔记

    IDE: Integrated Development Environment 集成开发环境

    粗体:blod 斜体:italic

    注释:comment

    line comment 单行注释, block comment ,多行注释

    constant:常量。 initialize:初始化。

    java.lang.ArrayIndexOutOfBoundsException:1 : 这个错误是指数组下标越界。

    object-oriented programming oop 面向对象编程

  • 相关阅读:
    JS定时器做物体运动
    JS做动态表格
    JS如何做2048(详细)
    改变 C/C++ 控制台程序的输出颜色和样式
    The Game Of Life – 数据结构与算法的敲门砖
    适用于 macOS 下 2K 显示器开启 HiDPI 的简便解决方案
    「踩坑记」Android API 判断权限申请结果的闪退问题
    Hello World!
    js 放大镜效果
    js 随机验证码生成及校验
  • 原文地址:https://www.cnblogs.com/hujesse4/p/14256072.html
Copyright © 2020-2023  润新知