栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java基础知识+进阶——第一阶段总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java基础知识+进阶——第一阶段总结

第4天必须掌握知识点 >>>基础结构以及类型

一、Java中数据类型有几种?

基本类型八种:byte short int long float double char boolean

二、java中常见的语法结构

1.顺序结构 从小至下 按照逻辑 运行代码

2.判断结构 

其中分为单分支结构以及多分支结构还有嵌套判断结构

>>>单分支结构 备注:如果只有一条判断if() 可以不用写大括号 直接sout输出

If(){  

}

>>>多分支结构

If(){

}else{

}

>>>嵌套分支结构

If(){

}else if{

}else if{

}else{

}

3.循环结构

>>>单循环for  快捷方式fori+回车键

For(开始条件; 判断条件;执行条件){

    执行语句...

>>>嵌套循环for

For(开始条件; 判断条件;执行条件){

For(开始条件; 判断条件;执行条件) {

}

>>>死循环while

While(true){

执行语句

>>>先执行的do...while

Do{

}while(true){

执行语句

}

4.选择结构

Switch(a);

Case 1    sout   break;

Case 2    sout break;

Default+ sout

  • 默写方法的书写格式

方法修饰符public+返回值类型void+方法名main+参数列表()+方法体{ }

第5天必须掌握知识点 >>>初识数组

一、理解什么是数组,书写格式以及应用?

数组理解成存储一组数据的组合;

存放多个相同类型的变量。java程序中的数组必须先进行初始化才可以使用,所谓初始化,就是为数组对象的元素分配内存空间,并为每个数组元素指定初始值,而在Java中,数组是静态的,数组一旦初始化,长度便已经确定,不能再随意更改。

书写格式分静态数组以及动态数组

静态数组:

Int [] a=new int[]{1,2,3,4,5,6};

Int[]a={1,2,3,4,5,6};

动态数组:

Int[]a=new int[6];

  • 数组的一些特性以及它的一些用法?
  1. 数组特性

数组是有个名为下标的东西,理解成数组里面每个元素的名字

a[0]=1; a[1]=2; a[2]=3;a[3]=4;a[4]=5;a[5]=6;

上面就是数组,叫做下标书写格式:首下标a[0]=X;

数组也有长度(length),里面有几个元素长度就是几,其中最大的下标为长度-1(length-1)

  1. 数组的用法

如果想要查看数组里面的具体元素,不能直接sout+数组名,需要用工具类(toString+数组名)

System.out.Println(Arrays.toString(数组名)) 备注: char类型特殊可以直接查看

如果数组想要排序,从头到尾逐个“过一遍”依次对每个元素均做一次且仅做一次访问。叫做数组的遍历;备注:遍历是访问每一个,并不是排序数组里面的元素。

遍历数组格写法:

for(int i=0; i<数组名.length;  i++){

  sout(i)>>>>>>这样写输出的只是数组但下标

 sout(数组名[i])>>>>>>这样写输出才是遍历后输出数组写法

}

数组排序的写法

大致分为三步>>>第一步创建数组 第二步调排序方法 第三步打印

int[] c6=new int[]{45,23,14,2,96,102,35,78};
Arrays.sort(c6);
System.out.println(Arrays.toString(c6));

数组的复制 扩容 缩容 截取范围玩法

分步来:复制

第一步创建一个数组

第二步使用Arrays的方法并且定一个新的数组名字

第三步执行 类型名+[]+新数组名=Arrays.copyOf(要复制的数组名,数组长度);

查看复制好的新数组sout+(Arrays.toSting(新数组名));

分步来:扩容

原理同上:第三步为 类型名+[]+新数组名=Arrays.copyOf(要扩容的数组名,新的数组长度);

分步来:缩容

原理同上:第三步为 类型名+[]+新数组名=Arrays.copyOf(要缩容的数组名,缩小的数组长度);

分步来:截取

原理同上:第三步为 类型名+[]+新数组名=Arrays.copyOfRange(要截取的数组名,第一个要截取的下标,第二个截止截取的下标);

第6天必须掌握知识点 >>>面向对象OOP

首先学习第一点面向对象其实就是一种思想

其次类是一类事物的总结出来的特征和行为理解成一个模板

对象

对象是根据类创建出一个个独立具体的实例

对象具有各种特征,并且每个特征都可以有自己特定的值

具有各种行为,一个类可以创建多个对象,通过对象的唯一地址值来区分对象

类与对象的关系

类是对象的抽象,对象是类的实体

面向对象的三大特征:

封装:继承:多态

面向对象特征之 封装

封装意思是隐藏对象的属性,仅仅对外提供公共的访问方式

好处:提高安全性&提高重用性

什么是匿名对象?

意思就是没有名字的对象,是创建对象的简化形式

比如:OPPO o=new OPPO(); o.play();

等价于new.OPPO().play();

第7天必须掌握知识点 >>>构造函数、构造代码

第14天必须掌握知识点 >>>collection/E/集合接口实现类(子类)

首先掌握集合概念 泛型概念 实际业务当中的怎么使用 理解透彻

一、泛型

泛型优点1 约束类型功能

<>里面规定是放指定的类型 一般是引用类型以及封装类型

泛型优点2 高级的通用代码

使用E表示元素的类型是Element类型 不管传入什么类型,都可以匹配上

e是形式参数 g h f之类都可以

eg:

 private static void print (E[] e){

         for (E ddd : e) {

               System.out.println(ddd);

          }

       }

二、高效for循环使用

for(1 2:3){循环体}

1:本轮遍历到的数据的类型2:遍历到的数据的名字3:指的是要遍历的数据/元2的名字随便

三、collection的方法 可以查看API直接变量名调用即可

需要记忆几个常用的方法调用;集合本质是数组

四、有疑问的问题?

Object[] array=c.toArray(); 这个转换数组类型之所以前面是Object是源代码底层规定,而且返回值类型也是object

第15天必须掌握知识点>>>collection/E/集合接口实现类(set与list map)

一、集合的迭代器(和数组遍历其实是一回事) 

操作步骤:

1.获取集合的迭代器 c2.iterator();

2.利用迭代器进行判断当前集合中是否有下一个可迭代的元素 it.hasNext()

3.利用迭代器获取当前迭代到的元素it.next()

备注:

想迭代先用这个集合的对象调用iterator方法

比如c.interator alt+回车接下创建对象 出来的泛型会默认和对象类型一样的

【Iterator it = c2.iterator();】

举例:

第一步Iterator it = c2.iterator();//alt+回车  变量名随便起

第二步while (it.hasNext()){//循环判断是否有元素可迭代

第三步Integer num=it.next();//根据迭代器获取本轮迭代到的集合中的元素

第四步System.out.println(num);//打印获取到的本轮迭代到的集合中元素

二、理解创建对象意思 阐述

1)Collection c=new ArrayList();

这是创建一个多态对象 ,左边的是一个父类的接口collection 右边是一个子实现类ArrayList

2)  ArrayList list=new ArrayList<>();

这是纯子类的对象

三、Arraylist与colleciton关系

Arraylist 作为子接口,是有顺序的>>>>>list一般都是和下标有关系的

它底层数据结构是数组,内存空间是连续的

特点:

1.可以存放重复的元素原理是索引值不同所以可以重放(索引就是下标意思一样的)

2.元素有下标并且可以存放重复的元素

3.数据量较大情况,增删慢查询快 因为是数组那样的连续的 所以块 链表那样就慢了

四、list的方法

因为继承于colleciton所以也可以用这个样子的调用c.add()方法

 几个不好记得方法

>>>>在集合的指定元素引处添加指定元素

list.add(1,"蛇精");

>>>>获取指定下标的元素

System.out.println(list.get(8))

>>>>修改集合元素中指定元素的值

System.out.println(list.set(5,"蝎子精"));

>>>>在list集合的指定元素索引处开始添加list2的所有元素

System.out.println(list.addAll(1,list2));

五、问题与疑问

关于迭代的多种方法

方法一:(循环逻辑 从哪开始 到哪结束 如何变化)

 for(int i=0;i

            System.out.println(list.get(i));这个是根据索引获取对应元素 调用get

        }

备注:i代表集合中元素的索引值,size代表的是元素个数哥就是长度,size-1就是最大下标值也就是最后一个元素

>>>>逆序迭代的编写思路

【第一步先写出正序迭代,判断是否走到头了 最后一个元素那里,用if判断看是不返回false这个结果,知道迭代器没有下一个元素可以迭代了if(false),然后有元素时候为真就可以进入大括号执行,进入后判断前面是否有元素可以迭代,然后打印获取到的前面的元素。记得加break不然就会从后往前然后前往后循环】

备注:it3.hasNext是判断后续是否有元素可迭/it3.previous判断前面是否有元素可以迭代

ListIterator it3 = list.listIterator();//

   while (it3.hasNext()) {//判断后续是否有元素可迭代

   System.out.println(it3.next());

if (!it3.hasNext()) {

    System.out.println("开始逆序迭代");

     while (it3.hasPrevious()) {

         System.out.println(it3.previous());

      }

       break;

                }

六、linkedlist与colleciton关系

linkedlist特点:底层结构为链表

1.linkedlist链表是一种新的数据结构,内存不连续,靠地址引用连起来

2.查询很慢 增删快 因为链表节点随时断连

3.也可以放重复元素

4.元素也有下标,有序

5.linkedlist头节点只有下一个节点的地址,尾节点有上一个节点的地址

七、linkedlist的不好记方法

 System.out.println(list2.offer("斗罗大陆"));//添加尾元素

System.out.println(list2.offerFirst("盗墓笔记"));//添加首元素

System.out.println(list2.offerLast("钢铁是怎样炼成的"));//添加尾元素

System.out.println(list2);

八、Map接口(这玩意不是集合的子类)

理解成一种映射关系 成对的  

比如泛型也就是<键,值>理解成一个钥匙开一个门

<9527 白骨精> 等价于

九、set接口与collection(接口子类 collection的接口实现类)

set这个接口实现类玩意主要是为了去重用的,然后方法也可以继承集合用add

特点:

1.集合中的元素的都是没有顺序的

2.set集合里面元素是不重复

3.set可以存null,但也就是存一个

第16天必须掌握知识点>>>进程、线程与多线程、异步、同步锁

一、进程与线程

进程就是一个打开一个程序一个软件

线程就是一个软件里面的菜单栏里面展开的小功能 依次理解

一个进程可以包含多个线程也可以单个(单线程)

然后那个CPU是同一时刻只能处理一件事

二、理解线程的状态

就绪>执行状态>阻塞状态

线程创建中申请的PCB值得是一个控制块,里面存的是当前线程的情况和活动过程

并且只有就绪才能转执行状态

  • 多线程实现的方案(Thread )

方式一

1.记住通过继承Thread类并重新run()来完成的

2.重写run()里面是我们的业务

3.创建多个线程对象

4.线程对象调用start,以多线程的方式启动

方式二

1.自定义多线程类实现Runnable接口

2.添加抽象方法run

3.创建自定义类对象,作为目标业务类对象

4.创建多个线程对象thread,

5.以多线程方式启动刚建好的多个线程对象start();

举例:方式一 记住这个是继承 extends Thread

 Mythread t1=new Mythread();

        Mythread t2=new Mythread();

        Mythread t3=new Mythread();

        Mythread t4=new Mythread();

        t1.start();

        t2.start();

        t3.start();

        t4.start();

class  Mythread extends Thread{

@Override

 public void run()

 for (int i = 0; i <10 ; i++) {

System.out.println(i+"="+getName());}

举例:方式二 这个是用到实现类接口 implements Runnable 

通过图中方法让runnable和thread建立关系 然后target就是runnable接口实现类的对象

 MyRunnable target=new MyRunnable();

       Thread t1=new Thread(target);

       Thread t2=new Thread(target);

       Thread t3=new Thread(target);

       Thread t4=new Thread(target);

       t1.start();

       t2.start();

       t3.start();

       t4.start();

    }

}

class MyRunnable implements Runnable{

    @Override

    public void run() {

     for (int i = 0; i <10 ; i++) {

   备注:curerntThread()是静态方法,可以被类直接调用,这个方法作用是获取当前正在执行的线程对象,咋们把它当作一个中转站,然后用 getname()再调用当前线程的名称

       System.out.println(i+"="+Thread.currentThread().getName());

        }

  • 多线程实现的方案(Thread )

线程池理解

它的工具是Executors,这玩意是辅助创建线程池的工具类

方法:newFixedThreadPooL(int)括号里是定线程的数目;

举例:

上面那个三、中的子类部分不变动,公共类上面就换成了如下,就是提高了效率,不用一个线程创建一个对象了,这么个意思的

TicketRunnable2 target =new TicketRunnable2();

ExecutorService pool = Executors.newFixedThreadPool(5);//使用Exectors工具的方法
//循环启动线程
        for (int i = 0; i <5 ; i++) {

            pool.execute(target);
        }

第17天必须掌握知识点>>>设计模式&注解&反射

一、单列设计模式

这个概念是主要目的就是为了节约系统内存空间,控制资源的使用

核心是确保对象有一个  这个要用到RunTime接口

关于单例设计模式的两种设计方式:

 * 1.饿汉式:不管你用不用这个类的对象,都会直接先创建一个

 * 2.懒汉式:先不给创建这类的对象,等你需要的时候再创建--延迟加载的思想

 * 延迟加载的思想:是指不会在第一时间就把对象创建好占用内存

 * 而是什么时候用到,什么时候再去创建对象

 * 3,线程安全问题:由于我们存在唯一对象single2,并且多条语句都操作了这个变量

 * 如果将程序放到多线程的环境下,旧容易出现数据安全的问题,

 * 所以解决方案

  • 怎么理解注解

这玩意是Java 1.5 开始引入的一种标注,相当于给代码打一个 tag、作一个标记。

有毛用?

编译器:让编译器 / APT根据注解的定义,去执行一些逻辑

运行期:让虚拟机根据字节码中的注解,执行一些逻辑

先这样理解:创建一个文件或一段代码,类型为 @interface。这样该 “类” 就变成了一个注解,为什么 “类”
要加引号呢,因为真正的类是 class 修饰的,而 @interface 修饰的就是一个注解。

语法格式@+类型+注解名

这个玩意一共分个三类

JDK自带注解>>>展开有5个

1.@SuppressWarnings(“deprecation”)

2.@Override :用来标识重写方法

3.@Deprecated标记就表明这个方法已经过时了,但我就要用,别提示我过期

元注解>>>展开有5个

@Target 注解用在哪里:类上、方法上、属性上等等

@Retention 注解的生命周期:源文件中、字节码文件中、运行中

@Inherited 允许子注解继承

自定义注解>>>

注意:注解的语法写法和常规java的语法写法不同

使用”ElementType.静态常量“的方式自定义注解具体可以加在什么位置

三、怎么理解反射

反射就是可以让运行中的 Java 程序对自身进行检查,或者说“自审”,也有称作“自省”。
反射能直接操作程序的私有属性。也可以当想使用别人的东西或者是资源时候,可以使用反射技术。反正不能直接看到源代码,就可以用反射技术

反射中单元测试方法:是java中最小的测试单位,使用灵活
语法要求:@Test+public+void+没有参数

代表是这个泛型范围更加宽广,理解为多态,反正就是约束类型的

反射前提

反射第一步获取字节码对象:

Class.forName(“类的全路径”);

类名.class

对象.getClass();

第二步使用常用方法

获取包名 类名

clazz.getPackage().getName()//包名

clazz.getSimpleName()//类名

clazz.getName()//完整类名

获取成员变量定义信息

getFields()//获取所有公开的成员变量,包括继承变量

getDeclaredFields()//获取本类定义的成员变量,包括私有,但不包括继承的变量

getField(变量名)

getDeclaredField(变量名)

四、理解字节码对象

.class"文件的对象就是字节码对象。jvm会把.class文件加载到内存,并在堆里创建字节码对象并初始化字节码对象的静态属性,并把类型信息等加载到方法区。

先说说字节码是一种包含执行程序,由一序列 op 代码/数据对组成的二进制文件,是一种中间码。字节是电脑里的数据量单位。然后字节码对象。

Class对象(字节码对象)

  java世界里,一切都是对象,可分为两种对象,Class对象和实例对象。每个类的运行时的类型信息就是用Class对象表示的。它包含了与类有关的信息。其实我们的实例对象就通过Class对象来创建的。

每一个类都有一个Class对象,每当编译一个新类就产生一个Class对象,基本类型 (boolean, byte, char, short, int, long, float, and double)有Class对象,数组有Class对象,就连关键字void也有Class对象(void.class)。Class对象对应着java.lang.Class类,如果说类是对象抽象和集合的话,那么Class类就是对类的抽象和集合。

        Class对象是在类加载的时候由java虚拟机(JVM)以及通过调用类加载器中的 defineClass方法自动构造的,一个类被加载到内存到供我们使用三个阶段:加载,连接,初始化

所有的类都是在对其第一次使用时,动态加载到JVM中的(懒加载)。当程序创建第一个对类的静态成员的引用时,就会加载这个类。使用new创建类对象的时候也会被当作对类的静态成员的引用。因此java程序程序在它开始运行之前并非被完全加载,其各个类都是在必需时才加载的。这一点与许多传统语言都不同。

社区回答理解:每个类被加载之后,系统就会为该类生成一个对应的字节码对象,通过该字节码对象就可以访问到JVM中的对应的类。在Java中获得Class对象通常有三种方式。

第一种:使用类的.class属性

  • Class<类类型> clz1 = 类名.class;

第二种:通过Class类中的静态方法forName(String className),传入类的全限定名(必须添加完整包名)比较常用

  • Class clz2 = Class.forName("java.util.Date");

第三种:通过对象的getClass方法来实现,其中,getClass()是Object类中的方法,所有的对象都可以调用该方法

  • Date str = new Date();

Class clz3 = str.getClass();

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/318548.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号