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 面向对象编程

原文地址:https://www.cnblogs.com/hujesse4/p/14256072.html