【名师课堂】Java高级开发

【名师课堂】Java高级开发

Java核心第三部
156课时 |
31736人已学 |
(17 评论)

加入学习
加入学习

eclipse中文日蚀

至今活下来的是eclipse和idea

怀念Borland 

 

[展开全文]

已经流行大量的数据库

考虑到环境

JDBC针对关系型数据库的开发服务

现在的数据库分关系型和nosql数据库,由项目业务决定

程序 jdbc 接口 对应操作 接口由数据库生产商提供

针对不同的书苦苦由不同的数据驱动,

jdbc_odbc连接 利用微软的odbc进行连接,性能在最差 

jdbc连接 直接利用各个生产商提供的 数据驱动 性能在最好

网络连接 集群 网络协议连接

现在用的是第二种

jdbc所有的开发操作对在java

1个类三个接口

 sql中

一个类 drivermannerger

接口 connection statement [re[arestatement接口

'

 

[展开全文]
毛俊 · 2017-11-02 · JDBC简介 0

例如现在要求我们设计一个求任意个数(整数)的和,我们可以这样来写

----------------------------------------

package day1;

 

public class Test {

public static void main(String[] args) {

System.out.println(add(new int[] {1,2,3,4}));

}

public static int add(int[] date){

int x = 0;

for(int i=0;i<date.length;i++){

x +=date[i];

}

return x;

}

 

}

--------------------------------------------

这种是最初实现,有一定缺陷,例如说,我现在想写一个任意参数的求和,而不是数字

System.out.println(add(1,2,3));这时上面的代码将报错,这时可以使用可变参数

语法:Public [static] [final] 返回值 方法名称(参数类型 … 参数名称){}//[]代表可选

例如:

---------------------------------------------------------

package day1;

 

public class Test {

public static void main(String[] args) {

System.out.println(add(1,4));//随意传递的值

System.out.println(add(new int[] {1,2,3,4}));

}

public static int add(int ... date){//本身还是一个数组

int x = 0;

for(int i=0;i<date.length;i++){

x +=date[i];

}

return x;

}

 

}

------------------------------------------------------------------

 

使用原则:参数个数不却定,随意由用户传递

注意:如果要传递多类参数,可变参数要写到最后例如

public static int add(String arg,int ... date){}

[展开全文]
java小黑 · 2017-10-31 · Java基础新特性(可变参数) 1

 ----- 请解释final, finally, finalize的区别
 ·final: 是一个关键字, 修饰类和方法时等于C#的sealed, 修饰变量时等于C++的const
 ·finally: 是异常处理的统一出口 (try catch finally)
 ·finalize: Object类中的方法, 等于C++的析构函数

[展开全文]
jovensun · 2017-10-04 · System类 0

向下转型是不安全的操作,会带来隐患。

[展开全文]
zeusshuai · 2017-09-30 · 泛型(泛型问题引出) 0

System.currentTimeMillis();

final、finally、finalize 的区别:

final是一个关键字,用于定义不能够被继承的父类、不能够被覆写的方法和常量

finally是异常处理的统一出口

finalize是Object类中的一个方法,用于在回收调用前进行处理。

[展开全文]
sky_fengbiubiu · 2017-08-20 · System类 0

泛型接口其子类有两种实现方式

 

第一种:实现类同样为泛型 

interface Mytest<T>{
     public void print(T t);
}

//第一种
public class testImpl01<T> implements Mytest<T>{

     public void print(T t){

     }
}

第二种:

public class testImpl02 implements Mytest<String>{

      public void print(String t){

      }
}

 

[展开全文]
芬达矿泉水 · 2017-07-28 · 泛型(泛型接口) 0

解决数据的重复设置或重复取出,需要等待及唤醒机制

public final void wait ()throws InterruptException;死等

public final void wait(long timeout) throws InterruptedException; 活等

public final void notify();

唤醒第一个

public final void notifyAll();

唤醒所有

package com.pra.synchronizedcase.union;

class Data{
    private String title;
    private String note;
    //flag=true 表示允许生产,但是不允许消费者取走
    //flag=flase 表示不允许生产,但允许消费者取走
    private boolean flag = true;
    public synchronized void get() {
        if(flag==true){
            //已经生产了,不允许重复生产
            try {
                super.wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(this.title+"="+this.note);
        flag=false;
        super.notify();
        
    }
    public void set(String title,String note) {
        this.title = title;
        if(flag==false){
            try {
                super.wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        flag=true;
        super.notify();

        this.note = note;

    }

    
    
}

 

请解释sleep()与wait()的区别
sleep()是Thread类中定义的方法,到了一定的时间可以自动唤醒
wait()是Object类中定义的方法,如果要想唤醒,必须使用notify()或者notifyAll()方法

[展开全文]

@FunctionalInterface 函数式编程的注解只能有一个抽象方法

函数编程() ->单行语句

()->{

多行语句

}

[展开全文]
lucky尧 · 2017-07-06 · Lambda表达式 0

@Deprecated 过期声明

[展开全文]
lucky尧 · 2017-07-06 · Annotation(过期声明) 0

1.任何的实例化对象可以通过Objec类中的getClass()方法取得Class类对象:

2.“类.class”:直接根据某一个具体的类来取得Class类的实例化对象:

3.使用Class类提供的方法: public static Class<?> forName(String className) throws ClassNotFoundException

在以上的三个方法里面我们会发现一个地方,除了第一种形式会产生Date类的实例化对象以外,其他的两种都不会产生Date类的实例化对象。于是取得了Class类对象有一个最直接的好处:可以直接通过反射实例化对象。在Class类里面定义有一个方法:

newInstance():

除了关键字new之外,对象的实例化有了第二种方式,通过反射进行。

取得了Class类对象,就意味着取得了一个指定类的操作权。

 

 

[展开全文]
想飞的我 · 2017-07-05 · Class类对象的三种实例化模式 0

反射机制:反射指的是对象的反向处理操作,首先需要来观察一下“正”的操作。在默认情况下,我们必须要先导入一个包,而后才能产生类的实例化对象。

所谓的“反"指的是根据对象类取得对象的来源信息,而这个“反”的操作核心处理就在于Object类的一个方法:

取得Class对象:public final Class<?> getClass():该方法返回的是一个Class类的对象,这个Class描述的就是类。

在反射的世界里面他所看重的不再是一个对象,而是对象身后的组成。(类,构造,普通,成员等)

 

[展开全文]
想飞的我 · 2017-07-05 · 认识反射机制 0

泛型只能用引用类型,不能用基础数据类型

[展开全文]
lucky尧 · 2017-07-05 · 泛型(通配符) 0

序列化与反序列化操作,需要用到IO中两个类:

ObjectOutputStream:

ObjectInputStream:

 

[展开全文]

对象序列化操作:

基本实现:指的是将在内存中保存的对象变为二进制数据流的形式进行传输,或者将其保存在文本中。并不意味着所有的类都能被实例化。需要传输使用,并实现Serializable接口。

序列化对象时所需要保存的就是对象中的属性,所有默认情况下对象的属性将转为二进制数据流存在。

[展开全文]

文件流的操作里面一定会产生一个文件数据(不管最后这个文件数据时候被保留),那么现在的要求是需要发生IO处理,那么有不希望产生文件,就可以使用内存作为操作的终端。

[展开全文]
想飞的我 · 2017-07-02 · 内存操作流(内存流基本操作) 0

方法引用--给方法起别名

引用静态方法 类名:: static 方法名

-----利用已经存在大代码

 

引用对象方法 对象:: 方法名

引用特定类方法 类名称::方法名

引用构造方法 类名称:: new

在JDK1.8才能使用。

[展开全文]
开花的葱 · 2017-06-30 · 方法引用 0

如果现在要求你处理的数据都在inputstream里面需要输出。

 

[展开全文]

package p.com.utik;

class Data{
    private String title;
    private String note;
    public synchronized void set(String title,String note)
    {
        this.title=title;
        this.note=note;
    }
    public synchronized String get()
    {
        return this.title+" "+this.note;
    }
}


class DataProvider implements Runnable{
    private Data data;
    public DataProvider(Data data) {
        this.data=data;
    }
    @Override
    public void run() {
        for(int i=0;i<50;i++)
        {
            if(i%2 == 0)
            {
                this.data.set("zhangsan","is bad man");
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
            }
            }else{
                this.data.set("People","are hard-working");
            }
        }
        
        
    }
    
}

class DataGettor implements Runnable{
    private Data data;
    public DataGettor(Data data) {
        this.data=data;
    }
    @Override
    public void run() {
        for(int i=0;i<50;i++)
        {
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        System.out.println(this.data.get());
        }
        
    };
    
}

public class TestDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Data data=new Data();
        new Thread(new DataProvider(data)).start();
        new Thread(new DataGettor(data)).start();
    }

    

}

同步问题得到解决,但无法解决交替问题

[展开全文]

授课教师

阿里云开发者社区全面升级
一站式体验,助力云上开发!
进入新社区

相关课程

查看更多 >

本课程相关云产品