Java快速入门!大专学历自学Net看大仙如何快速转职Java

Posted Java架构-大仙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java快速入门!大专学历自学Net看大仙如何快速转职Java相关的知识,希望对你有一定的参考价值。

Java是什么?我就是死都不会学Java

1.注释

注释的重要性不言而喻,我们不管写什么代码注释必不可少,那么java的注释的书写方式与注释模板是怎么进行的呢?我们来看一下。

package frist;
/*
 * @Description HelloWorld类
 * @Author 王延领
 **/
class HelloWorld {
    /*
    这是我们Java程序的主入口,
    main方法也是程序的主线程。
    */
    public static void main(String[] arg)
    {
        //输出
       System.out.println("wyl");
    }
}

1.1 注释

以上可以看出java的注释主要有三种
单行注释:只能注释当前行,以//开始,直到行结束

 //输出

多行注释:注释一段文字,以/*开始, */结束!

 /*
    这是我们Java程序的主入口,
    main方法也是程序的主线程。
 */

文档注释:用于生产API文档,配合JavaDoc。

/*
 * @Description HelloWorld类
 * @Author 王延领
 **/

1.2 idea注释模版配置

1.2.1 定义java文件头部的注释

File => setting => editor => File and Code Templates-class -Includes

/**
  * @创建人 王延领
  *@创建时间 ${DATE}
  *描述 Todo
**/

以上当你创建一个class的时候就会带上以上信息了

1.2.2 给java类中的方法添加上注释

第一步勾选Enable Live Templates
首先要在上一步中勾选中 Enable Live Templates

第二步新建一个Group
其次要打开LiveTemplates 然后新建一个Group
如图:

在弹窗口中输入你想要的group名称,wyl

其中:Abbreviation 为快捷键,当输入w的时候就会提示对应的方法注释模板,j为类的注释模板

Templete Text
注释内容,$$ 为动态模板参数点击Edit Vaariables 选择对应动态值。

/*
 * @描述: TODO
 * @作者 王延领
 * @时间 2021/7/12
 * @版本 1.0
 */
public class wyl {
    /**
     *@描述
     *@参数 [str]
     *@返回值 [java.lang.String]
     *@创建人 王延领
     *@创建时间 2021/7/12
     *@修改人和其它信息
     */
    public String CommentTemplate(String str)
    {
        return str;
    }
}

2.关键字

关键字说明
private一种访问控制方式:私用模式
protected一种访问控制方式:保护模式
public一种访问控制方式:共用模式
abstract表明类或者成员方法具有抽象属性
class
extends表明一个类型是另一个类型的子类型,这里常见的类型有类和接口
final用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变
implements表明一个类实现了给定的接口
interface接口
native用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
new用来创建新实例对象
static表明具有静态属性
strictfp用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范
synchronized表明一段代码需要同步执行
transient声明不用序列化的成员域
volatile表明两个或者多个变量必须同步地发生变化
break提前跳出一个块
continue回到一个块的开始处
return从成员方法中返回数据
do用在do-while循环结构中
while用在循环结构中
if条件语句的引导词
else用在条件语句中,表明当条件不成立时的分支
for一种循环结构的引导词
instanceof用来测试一个对象是否是指定类型的实例对象
switch分支语句结构的引导词
case用在switch语句之中,表示其中的一个分支
default默认,例如,用在switch语句中,表明一个默认的分支
try尝试一个可能抛出异常的程序块
catch用在异常处理中,用来捕捉异常
throw抛出一个异常
throws声明在当前定义的成员方法中所有需要抛出的异常
import表明要访问指定的类或包
package
boolean基本数据类型之一,布尔类型
byte基本数据类型之一,字节类型
char基本数据类型之一,字符类型
double基本数据类型之一,双精度浮点数类型
float基本数据类型之一,单精度浮点数类型
int基本数据类型之一,整数类型
long基本数据类型之一,长整数类型
short基本数据类型之一,短整数类型
super表明当前对象的父类型的引用或者父类型的构造方法
this指向当前实例对象的引用
void声明当前成员方法没有返回值
goto保留关键字,没有具体含义
const保留关键字,没有具体含义

3.数据类型

3.1.数据类型转换

3.1.1自动类型转换
自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。

注:如果低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值
3.1.2 强制类型转换
强制类型转换,又被称为造型,用于显式的转换一个数值的类型.
转换方式为:(type)var ,运算符“()”中的type表示将值var想要转换成的目标数据类型。 条件是转换的数据类型必须是兼容的。

double x = 3.14;
int nx = (int)x; //值为3
char c = 'a';
int d = c+1;
System.out.println(d); //98
System.out.println((char)d); //b

3.1.3.包装类过渡类型转换

  • eg1:int i=Integer.parseInt(“123”)
    说明:此方法只能适用于字符串转化成整型变量
  • eg2: float f=Float.valueOf(“123”).floatValue()
    说明:上例是将一个字符串转化成一个Float对象,然后再调用这个对象的floatValue()方法返回其对应的float数值。
  • eg3: boolean b=Boolean.valueOf(“123”).booleanValue()
    说明:上例是将一个字符串转化成一个Boolean对象,然后再调用这个对象的booleanValue()方法返回其对应的boolean数值。
  • eg4:double d=Double.valueOf(“123”).doublue()
    说明:上例是将一个字符串转化成一个Double对象,然后再调用这个对象的doublue()方法返回其对应的double数值。
  • eg5: long l=Long.valueOf(“123”).longValue()
    说明:上例是将一个字符串转化成一个Long对象,然后再调用这个对象的longValue()方法返回其对应的long数值。
  • eg6: char=Character.valueOf(“123”).charValue()
    说明:上例是将一个字符串转化成一个Character对象

++++++++++++++++++++++++++++++++++++++++++++++++++++++

4.常量、变量、运算符

常量

变量是什么:就是可以变化的量!
我们通过变量来操纵存储空间中的数据,变量就是指代这个存储空间!空间位置是确定的,但是里面放
置什么值不确定!Java是一种强类型语言,每个变量都必须声明其类型。

//数据类型 变量名 = 值;可以使用逗号隔开来声明多个同类型变量。

注意事项:
每个变量都有类型,类型可以是基本类型,也可以是引用类型。
变量名必须是合法的标识符。
变量声明是一条完整的语句,因此每一个声明都必须以分号结束
变量作用域
类变量(静态变量: static variable):独立于方法之外的变量,用 static 修饰。
实例变量(成员变量:member variable):独立于方法之外的变量,不过没有 static 修饰。
局部变量(lacal variable):类的方法中的变量。

变量

常量(Constant):初始化(initialize)后不能再改变值!不会变动的值。

final 常量名=;
final double PI=3.14;

命名规范

  1. 所有变量、方法、类名:见名知意
  2. 类成员变量:首字母小写和驼峰原则 : monthSalary
  3. 局部变量:首字母小写和驼峰原则
  4. 常量:大写字母和下划线:MAX_VALUE
  5. 类名:首字母大写和驼峰原则: Man, GoodMan
  6. 方法名:首字母小写和驼峰原则: run(), runRun()

运算符

Java 语言支持如下运算符:
算术运算符: +,-,,/,%,++,–
赋值运算符 =
关系运算符: >,<,>=,<=,==,!= instanceof
逻辑运算符: &&,||,!
位运算符: &,|,^,~ , >>,<<,>>> (了解!!!)
条件运算符 ?:
扩展赋值运算符:+=,-=,
=,/=

5.java流转控制

if…else、while、do…while、for、switch…case 在这就不累述了。
跳转:
return
return从一个方法返回,并把控制权交给调用它的语句序;或者直接结束当前的程序;
break
break语句在for、while、do···while循环语句中,经常用于强行退出当前循环;
continue
continue语句用于跳过此次循环,执行下次循环;

6.方法

那么什么是方法呢?
Java方法是语句的集合,它们在一起执行一个功能。
方法是解决一类问题的步骤的有序组合
方法包含于类或对象中
方法在程序中被创建,在其他地方被引用
设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最
好保持方法的原子性,就是一个方法只完成1个功能,这样利于我们后期的扩展。
方法的优点
使程序变得更简短而清晰。
有利于程序维护。
可以提高程序开发的效率。
提高了代码的重用性。

定义

修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...c
return 返回值;
}

**修饰符:**修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
**返回值类型 :**方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需
的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。
**方法名:**是方法的实际名称。方法名和参数表共同构成方法签名。
**参数类型:**参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参
数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
形式参数:在方法被调用时用于接收外界输入的数据。
实参:调用方法时实际传给方法的数据。
**方法体:**方法体包含具体的语句,定义该方法的功能。

方法的重载

就是说一个类的两个方法拥有相同的名字,但是有不同的参数列表。

可变参数

在方法声明中,在指定参数类型后加一个省略号(…) 。
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声
明。

typeName... parameterName

递归

自己调用自己

7.数组

数组的定义:

数组是相同类型数据的有序集合.
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.

数组的四个基本特点:

  1. 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
  2. 其元素必须是相同类型,不允许出现混合类型。
  3. 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
  4. 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量

数组声明

dataType[] arrayRefVar; // 首选的方法
或
dataType arrayRefVar[]; // 效果相同,但不是首选方法

创建数组

arrayRefVar = new dataType[1 arraySize];

数组的元素是通过索引访问的。数组索引从 0 开始,所以索引值从 0 到 arrayRefVar.length-1。

三种初始化

静态初始化
除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。

int[] a = {1,2,3};
Man[] mans = {new Man(1,1),new Man(2,2)};

动态初始化
数组定义、为数组元素分配空间、赋值的操作、分开进行。

int[] a = new int[2];
a[0]=1;
a[1]=2;

数组的默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实
例变量同样的方式被隐式初始化。

public static void main(String[] args) {
int[] a=new int[2];
boolean[] b = new boolean[2];
String[] s = new String[2];
System.out.println(a[0]+":"+a[1]); //0,0
System.out.println(b[0]+":"+b[1]); //false,false
System.out.println(s[0]+":"+s[1]); //null, null
}

数组边界

下标的合法区间:[0, length-1],如果越界就会报错;

for 和For-Each 循环

for(type element: array){
System.out.println(element);
}

for (int i = 1; i < myList.length; i++) {
System.out.println(myList[i]);
}

多维数组

type[][] typeName = new type[typeLength1][1 typeLength2];

Arrays 类

数组的工具类java.util.Arrays
java.util.Arrays 类能方便地操作数组. 使用之前需要导包!
具有以下常用功能:
给数组赋值:通过 fill 方法。
对数组排序:通过 sort 方法,按升序。
比较数组:通过 equals 方法比较数组中元素值是否相等。
查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
转换为list: 通过asList(a)进行转换

8.面向对象

万物皆为对象!!!对象是抽象概念的具体实例。

以类的方式组织代码,以对象的组织(封装)数据就是面向对象

继承

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

class 父类 {
}
class 子类 extends 父类 {
}

public interface A {
    public void eat();
    public void sleep();
}

public interface B {
    public void show();
}

public class C implements A,B {
}

为什么要继承,因为有重复。所以才继承,进而我们就知道了。父类就是公共部分的定义或规则

Java 不支持多继承(只能继承一个类),但支持多重继承。

特点

  • 子类拥有父类非 private 的属性、方法。

  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。

  • 子类可以用自己的方式实现父类的方法。

  • Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。

  • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)

super 与 this 关键字

class Animal {
  void eat() {
    System.out.println("animal : eat");
  }
}

class Dog extends Animal {
  void eat() {
    System.out.println("dog : eat");
  }
  void eatTest() {
    this.eat();   // this 调用自己的方法
    super.eat();  // super 调用父类方法
  }
}

public class Test {
  public static void main(String[] args) {
    Animal a = new Animal();
    a.eat();
    Dog d = new Dog();
    d.eatTest();
  }
}

animal : eat
dog : eat
animal : eat

final关键字
final 关键字声明类可以把类定义为不能继承的,即最终类;

class SuperClass {
  private int n;
  SuperClass(){
    System.out.println("SuperClass()");
  }
  SuperClass(int n) {
    System.out.println("SuperClass(int n)");
    this.n = n;
  }
}
// SubClass 类继承
class SubClass extends SuperClass{
  private int n;

  SubClass(){ // 自动调用父类的无参数构造器
    System.out.println("SubClass");
  }  

  public SubClass(int n){ 
    super(300);  // 调用父类中带有参数的构造器
    System.out.println("SubClass(int n):"+n);
    this.n = n;
  }
}
// SubClass2 类继承
class SubClass2 extends SuperClass{
  private int n;

  SubClass2(){
    super(300);  // 调用父类中带有参数的构造器
    System.out.println("SubClass2");
  }  

  public SubClass2(int n){ // 自动调用父类的无参数构造器
    System.out.println("SubClass2(int n):"+n);
    this.n = n;
  }
}
public class TestSuperSub{
  public static void main (String args[]){
    System.out.println("------SubClass 类继承------");
    SubClass sc1 = new SubClass();
    SubClass sc2 = new SubClass(100); 
    System.out.println("------SubClass2 类继承------");
    SubClass2 sc3 = new SubClass2();
    SubClass2 sc4 = new SubClass2(200); 
  }
}

------SubClass 类继承------
SuperClass()
SubClass
SuperClass(int n)
SubClass(int n):100
------SubClass2 类继承------
SuperClass(int n)
SubClass2
SuperClass()
SubClass2(int n):200

构造函数

子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。

如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。

重写(Override)与重载(Overload)

重写(Override)

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写

class Animal{
   public void move(){
      System.out.println("动物可以移动");
   }
}

class Dog extends Animal{
   public void move(){
      System.out.println("狗可以跑和走");
   }
}

public class TestDog{
   public static void main(String args[]){
      Animal a = new Animal(); // Animal 对象
      Animal b = new Dog(); // Dog 对象
      a.move();// 执行 Animal 类的方法
      b.move();//执行 Dog 类的方法
   }
}

动物可以移动
狗可以跑和走

方法的重写规则

  • 参数列表与被重写方法的参数列表必须完全相同。

  • 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。

  • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。

  • 父类的成员方法只能被它的子类重写。

  • 声明为 final 的方法不能被重写。

  • 声明为 static 的方法不能被重写,但是能够被再次声明。

  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。

  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。

  • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。

  • 构造方法不能被重写。

  • 如果不能继承一个类,则不能重写该类的方法。

重载(Overload)

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

最常用的地方就是构造器的重载。

public class Overloading {
    public int test(){
        System.out.println("test1");
        return 1;
    }

    public void test(int a){
        System.out.println("test2");
    }   

    //以下两个参数类型顺序不同
    public String test(int a,String s){
        System.out.println("test3");
        return "returntest3";
    }   

    public String test(String s,int a){
        System.out.println("test4");
        return "returntest4";
    }   

    public static void main(String[] args){
        Overloading o = new Overloading();
        System.out.println(o.test());
        o.test(1);
        System.out.println(o.test(1,"test3"));
        System.out.println(o.test("test4",1));
    }
}

重载规则:

  • 被重载的方法必须改变参数列表(参数个数或类型不一样);

  • 被重载的方法可以改变返回类型;

  • 被重载的方法可以改变访问修饰符;

  • 被重载的方法可以声明新的或更广的检查异常;

  • 方法能够在同一个类中或者在一个子类中被重载。

  • 无法以返回值类型作为重载函数的区分标准。

    区别点重载方法重写方法
    参数列表必须修改一定不能修改
    返回类型可以修改一定不能修改
    异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常
    访问可以修改一定不能做更严格的限制(可以降低限制)

多态

多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作。

多态性是对象多种表现形式的体现。

多态的优点

  1. 消除类型之间的耦合关系
  2. 可替换性
  3. 可扩充性
  4. 接口性
  5. 灵活性
  6. 简化性

多态存在的三个必要条件

继承
重写
父类引用指向子类对象:Parent p = new Child();

class Shape {
    void draw() {}
}

class Circle extends Shape {
    void draw() {
        System.out.println("Circle.draw()");
    }
}

class Square extends Shape {
    void draw() {
        System.out.println("Square.draw()");
    }
}

class Triangle extends Shape {
    void draw() {
        System.out.println("Triangle.draw()");
    }
}

虚函数

虚函数的存在是为了多态。

Java 中其实没有虚函数的概念,它的普通函数就相当于 C++ 的虚函数,动态绑定是Java的默认行为。如果 Java 中不希望某个函数具有虚函数特性,可以加上 final 关键字变成非虚函数。

多态的实现方式

方式一:重写:

方式二:接口

方式三:抽象类和抽象方法

抽象类

拥有抽象方法的类就是抽象类,抽象类要使用abstract关键字声明.

abstract class A{//定义一个抽象类
	public void fun(){//普通方法
		System.out.println("存在方法体的方法");
	}
	public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰

}

继承抽象类

我们可以通过以下方式继承 Employee 类的属性

抽象类的使用原则
(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;
(2)抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理;
(3)抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;
(4)子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。);

package com.wz.abstractdemo;

abstract class A{//定义一个抽象类

	public void fun(){//普通方法
		System.out.println("存在方法体的方法");
	}

	public abstract 以上是关于Java快速入门!大专学历自学Net看大仙如何快速转职Java的主要内容,如果未能解决你的问题,请参考以下文章

普通大专真的可以自学 Java 吗?

如何让一个Java新手快速入门?

自学java四年,分享学习资料

谁说大专非科班学历就不能进大厂,我用结果来证明这个是谣言!(附带自学资料包分享)

自学Java用哪本书好?

如何快速入门ui设计?