zoukankan      html  css  js  c++  java
  • Code

    1、两个线程加两个线程减

    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    /**
    两个线程加两个线程减
    */
    public class ThreadTest3 {
        private static int j;
        private static final Lock lock = new ReentrantLock();
    
        public static void main(String[] args) {
            for (int i = 0; i < 2; i++){
                new Thread(new Runnable() {
                    public void run() {
                        while (true) {
                            lock.lock();
                            try {
                        System.out.println(Thread.currentThread().getName()+"j--=" + j--);
                            } finally {
                                lock.unlock();
                            }
                        }
                    }
                }).start();
    
                new Thread(new Runnable() {
                    public void run() {
                        while (true) {
                            lock.lock();
                            try {
                        System.out.println(Thread.currentThread().getName()+"j++=" + j++);
                            } finally {
                                lock.unlock();
                            }
                        }
                    }
                }).start();
            }
        }
    }
    View Code

    2、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次

    package com.zhang.thread;
    
    /**
     * @author zhangjinru
     *子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次
     */
    
    public class ThreadTest2 {
        public static void main(String[] args) {
            new ThreadTest2().init();
        }
    
        public void init() {
            Business business = new Business();
            new Thread(new Runnable() {
                public void run() {
                    for (int i = 1; i <= 50; i++) {
                        business.SubThread(i);
                    }
                }
            }).start();
    
            for (int i = 1; i <= 50; i++) {
                business.MainThread(i);
            }
        }
    
        private class Business {
            boolean bShouldSub = true;// 这里相当于定义了控制该谁执行的一个信号灯
    
            public synchronized void MainThread(int i) {
    
                if (bShouldSub)
                    try {
                        this.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
    
                for (int j = 0; j < 100; j++) {
                System.out.println(Thread.currentThread().getName() + ":第" + i + "次,j=" + j);
                }
                bShouldSub = true;
                this.notify();
            }
    
            public synchronized void SubThread(int i) {
    
                if (!bShouldSub)
                    try {
                        this.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
    
                for (int j = 0; j < 10; j++) {
                System.out.println(Thread.currentThread().getName() + ":第" + i + "次,j=" + j);
                }
                bShouldSub = false;
                this.notify();
            }
        }
    }
    View Code

    3、Socket套接字

    网络上具有唯一标识的IP地址和端口组合在一起才能构成唯一能识别的标识符套接字。

    Socket原理机制:

    通信的两端都有Socket

    网络通信其实就是Socket间的通信

    数据在两个Socket间通过IO传输

    4、Java中的socket编程(基于TCP/IP协议)

    客户端编写:

    创建一个Socket实例:构造函数向指定的远程主机和端口建立一个TCP连接;

    通过套接字的I/O流与服务端通信;

    使用Socket类的close方法关闭连接。

    public class ClientSocket {
      public static void main(String args[]) {
            String host = "127.0.0.1";
            int port = 8919;
            try {
              Socket client = new Socket(host, port);
              Writer writer = new OutputStreamWriter(client.getOutputStream());
              writer.write("Hello From Client");
              writer.flush();
              writer.close();
              client.close();
            } catch (IOException e) {
              e.printStackTrace();
            }
        }
    }

    上面代码中,host即客户端需要连接的机器,port就是服务器端用来监听请求的端口。在选择端口时,需要注意一点,就是0~1023这些端口都已经被系统预留了。这些端口为一些常用的服务所使用,比如邮件,FTP和HTTP。当你在编写服务器端的代码,选择端口时,请选择一个大于1023的端口。

    服务器端编写:

    创建一个ServerSocket实例并指定本地端口,用来监听客户端在该端口发送的TCP连接请求;

    重复执行:

    • 调用ServerSocket的accept()方法以获取客户端连接,并通过其返回值创建一个Socket实例;

    • 为返回的Socket实例开启新的线程,并使用返回的Socket实例的I/O流与客户端通信;

    • 通信完成后,使用Socket类的close()方法关闭该客户端的套接字连接。

    public class ServerClient {
     public static void main(String[] args) {
           int port = 8919;
           try {
               ServerSocket server = new ServerSocket(port);
             while(true){
               Socket socket = server.accept();
               Reader reader = new InputStreamReader(socket.getInputStream());
               char chars[] = new char[1024];
               int len;
               StringBuilder builder = new StringBuilder();
               while ((len=reader.read(chars)) != -1) {
                  builder.append(new String(chars, 0, len));
              }
               System.out.println("Receive from client message=: " + builder);
            }               
               reader.close();
               socket.close();
               server.close();
          } catch (Exception e) {
               e.printStackTrace();
          }
    }
    }

    上面的代码创建了一个服务器端的socket,然后调用accept方法监听并获取客户端的请求socket。accept方法是一个阻塞方法,在服务器端与客户端之间建立联系之前会一直等待阻塞。

     

    5、简单的Socket通讯(面试)

    客户端:
    
    package com.zhang.socket;
    ​
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.Socket;
    //没有关闭流
    public class test1 {
    public static void main(String[] args) {
    ​
    try {
    Socket socket = new Socket("127.0.0.1", 8888);
    DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
    DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
    new Thread(new Runnable() {
    @Override
    public void run() {
    try {
    while (true) {
    try {
    Thread.sleep(5000);
    dataOutputStream.writeUTF("哈哈哈");
    dataOutputStream.flush();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }).start();
    ​
    new Thread(new Runnable() {
    public void run() {
    try {
    while (true) {
    String str = dataInputStream.readUTF();
    System.out.println(str);
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }).start();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    
    服务端:
    
    package com.zhang.socket;
    ​
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    //没有关闭流
    public class test2 {
    public static void main(String[] args) {
    try {
    ServerSocket serverSocket = new ServerSocket(8888);
    while (true) {
    System.out.println("等待连接");
    Socket socket = serverSocket.accept();
    DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
    DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
    ​
    new Thread(new Runnable() {
    public void run() {
    try {
    while (true) {
    String str = dataInputStream.readUTF();
    System.out.println(str);
    dataOutputStream.writeUTF("客户端发来的:" + str);// 读出了后再写回去
    dataOutputStream.flush();
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }).start();
    ​
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    ​
    }
    }
    View Code

    6、Socket的多人聊天室

    客户端:
    
    package com.zhang.socket;
    ​
    import java.awt.BorderLayout;
    import java.awt.Frame;
    import java.awt.TextArea;
    import java.awt.TextField;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.Socket;
    import java.net.SocketException;
    ​
    public class ChatClient extends Frame {
    private static final long serialVersionUID = 1L;
    private TextArea ta = new TextArea();
    private TextField tf = new TextField();
    private DataOutputStream dos = null;
    private DataInputStream dis = null;
    private Socket socket = null;
    private boolean bConnected = false;
    private Thread thread = null;
    ​
    public static void main(String[] args) {
    new ChatClient().frameClient();
    }
    ​
    public void frameClient() {
    setSize(400, 400);
    setLocation(400, 300);
    add(ta, BorderLayout.NORTH);
    add(tf, BorderLayout.SOUTH);
    pack();//Frame 布局
    tf.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
    String strMsg = tf.getText();
    tf.setText("");
    try {
    dos.writeUTF(strMsg);
    dos.flush();
    } catch (IOException e1) {
    e1.printStackTrace();
    }
    }
    });
    // 关闭窗口事件监听
    this.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
    disconnected();
    System.exit(0);
    }
    });
    this.connect();
    setVisible(true);
    }
    ​
    // 链接服务器地址
    private void connect() {
    try {
    socket = new Socket("127.0.0.1", 8888);
    dos = new DataOutputStream(socket.getOutputStream());
    dis = new DataInputStream(socket.getInputStream());
    thread = new Thread(new ChatThread());
    thread.start();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    ​
    // 断开连接
    private void disconnected() {
    bConnected = false;
    try {
    dos.close();
    dis.close();
    socket.close();
    } catch (IOException e1) {
    e1.printStackTrace();
    }
    }
    
    // 开启线程接受服务器信息
    private class ChatThread implements Runnable {
    @Override
    public void run() {
    try {
    bConnected = true;
    while (bConnected) {
    String msg = dis.readUTF();
    String taText = ta.getText();
    ta.setText(taText + msg + "
    ");
    }
    } catch (SocketException e) {
    System.out.println("退出");
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }
    
    服务端:
    
    package com.zhang.socket;
    ​
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.ArrayList;
    import java.util.List;
    ​
    public class ChatServer {
    private boolean started = false;
    private List<ChatThread> chatThreads = new ArrayList<ChatThread>();
    ​
    public static void main(String[] args) {
    new ChatServer().startServer();
    }
    ​
    private void startServer() {
    ServerSocket serverSocket=null;
    try {
    // 开启服务端Socket
    serverSocket = new ServerSocket(8888);
    started = true;
    while (started) {
    // 接受客户端连接请求
    Socket socket = serverSocket.accept();
    String RemoteIP =socket.getInetAddress().getHostAddress();
    String RemotePort = ":"+socket.getLocalPort();
    System.out.println("客户端"+RemoteIP+RemotePort+"已连接");
    // 开启线程处理客户端通信
    ChatThread ct = new ChatThread(socket);
    chatThreads.add(ct);
    new Thread(ct).start();
    }
    } catch (IOException e) {
    e.printStackTrace();
    }finally {
    try {
    serverSocket.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    ​
    private class ChatThread implements Runnable {
    private Socket socket;
    private DataInputStream din = null;
    private DataOutputStream don = null;
    private boolean bConnected = false;
    ​
    public ChatThread(Socket socket) {
    this.socket = socket;
    }
    ​
    // 发送信息的函数
    private void send(String strMsgIn) {
    try {
    don.writeUTF(strMsgIn);
    don.flush();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    ​
    @Override
    public void run() {
    try {
    din = new DataInputStream(socket.getInputStream());
    don = new DataOutputStream(socket.getOutputStream());
    // 读取数据
    bConnected = true;
    while (bConnected) {
    String strMsgIn = din.readUTF();
    System.out.println(strMsgIn);
    // 接收到数据后发送给每个客户端
    for (int i = 0; i < chatThreads.size(); i++) {
    chatThreads.get(i).send(strMsgIn);
    }
    }
    } catch (IOException e) {
    try {
    // 如果客户端出错或关闭,直接关闭连接,并移除List中的当前线程
    socket.close();
    chatThreads.remove(this);
    } catch (IOException e1) {
    e1.printStackTrace();
    }
    } finally {
    try {
    din.close();
    don.close();
    socket.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    ​
    }
    }
    View Code

    7、文件的基本操作 

    package com.zhang.thread;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    
    public class IOTest {
        public static void main(String[] args) throws Exception {
            ReadFile();
            WriteFile();
            CopyPicture("pic.jpg", "哈哈哈.jpg");
            CopyFile("a.txt", "f.txt");
        }
    
        /**
         * 写文件
         */
        private static void WriteFile() {
            String s= "哈哈哈";
            try {
                //字节流写入文件
                FileOutputStream fos = new FileOutputStream("1.txt");
                fos.write(s.getBytes("UTF-8"));
                fos.close();
    
                // 字符流写入文件
                FileWriter fw = new FileWriter("1.txt");
                fw.write(s);
                fw.close();
    
                // 字符流写入文件
                PrintWriter pw = new PrintWriter("1.txt", "utf-8");
                pw.write(s);
                pw.close();
    
                //通过缓存写数据
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("2.txt")), "UTF-8"));
                for (int i = 1; i < 100; i++) {
                    bw.write("哈哈哈" + i);
                    bw.newLine();
                }
                bw.close();
            } catch (Exception e) {
                System.err.println("write errors :" + e);
            }
    
        }
    
        /**
         * 读文件
         */
        private static void ReadFile() {
            StringBuilder result = new StringBuilder();
            try {
                //通过字符流读文件
                FileReader fr = new FileReader("2.txt");
                char[] buf = new char[1024];
                int len =0;
                while((len=fr.read(buf))!=-1){
                    String myStr = new String(buf, 0, len);
                    System.out.println(myStr);
                }
                fr.close();
    
                // 字节流读文件
                FileInputStream frs = new FileInputStream("1.txt");
                byte[] bufs = new byte[1024];
                int lens = 0;
                while((lens=frs.read(bufs))!=-1){
                    String myStrs=new String(bufs, 0, lens,"UTF-8");
                    System.out.println(myStrs);
                }
                frs.close();
    
                //通过缓存读书节    
    //            BufferedReader bf = new BufferedReader(new FileReader("names.txt"));
                BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("1.txt")), "UTF-8"));
                String lineTxt = null;
                while ((lineTxt = br.readLine()) != null) {
                    System.out.println(lineTxt);
                    result.append(lineTxt+"
    ");
                }
                br.close();
                System.out.println(result.toString());
            } catch (Exception e) {
                System.err.println("read errors :" + e);
            }
        }
        
        /**
         * 通过字节流复制文件,可以复制文本文件和二进制文件,如图片
         * @param oldfile
         * @param newfile
         * @throws Exception
         */
        private static void CopyPicture(String oldfile, String newfile) throws Exception {
            int len = 0;
            byte[] buf = new byte[1024];
            BufferedInputStream bufferedInputStream =new BufferedInputStream(new FileInputStream(new File(oldfile)));
            BufferedOutputStream bufferedOutputStream =new BufferedOutputStream(new FileOutputStream(new File(newfile)));
            while ((len = bufferedInputStream.read(buf)) != -1) {
                bufferedOutputStream.write(buf, 0, len);
            }
            bufferedInputStream.close();
            bufferedOutputStream.close();
        }
    
        /**
         * 通过字符流复制文件,只能复制文本文件,如果复制二进制文件会出错
         * @param oldfile
         * @param newfile
         * @throws Exception
         */
        private static void CopyFile(String oldfile, String newfile) throws Exception{
            BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(new FileInputStream(new File(oldfile)), "UTF-8"));
            BufferedWriter bufferedWriter =new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(newfile)),"UTF-8"));
            String len=null;
            while((len=bufferedReader.readLine())!=null){
                bufferedWriter.write(len);
                bufferedWriter.newLine();
            }
            bufferedReader.close();
            bufferedWriter.close();
        }    
    }
    View Code

     8、将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。

    public static void main(String[] args) throws Exception {
    FileManager a = new FileManager("a.txt", new char[] { '
    ' });
    FileManager b = new FileManager("b.txt", new char[] { '
    ', ' ' });
    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("c.txt")), "UTF-8"));
    String aWord = null;
    String bWord = null;
    while ((aWord = a.nextWord()) != null) {
    bufferedWriter.write(aWord);
    bufferedWriter.newLine();
    if ((bWord = b.nextWord()) != null) {
    bufferedWriter.write(bWord);
    bufferedWriter.newLine();
    }
    }
    while ((bWord = b.nextWord()) != null) {
    bufferedWriter.write(bWord);
    bufferedWriter.newLine();
    }
    bufferedWriter.close();
    }
    }
    ​
    class FileManager {
    String[] words = null;
    int pos = 0;
    FileManager(String filename, char[] seperators) throws Exception {
    StringBuilder builder = new StringBuilder();
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filename)), "UTF-8"));
    char[] buf = new char[1024];
    int len = 0;
    while ((len = bufferedReader.read(buf)) != -1) {
    builder.append(new String(buf, 0, len));
    }
    bufferedReader.close();
    String regex = null;
    if (seperators.length > 1) {
    regex = "" + seperators[0] + "|" + seperators[1];
    } else {
    regex = "" + seperators[0];
    }
    words = builder.toString().split(regex);
    }
    ​
    public String nextWord() {
    if (pos == words.length){
    return null;
    }
    return words[pos++];
    }
    View Code

    9、查找Java文件夹下的全部.java文件,并复制到jad文件夹下后缀改为.jad

    File srcDir = new File("java");
    if (!(srcDir.exists() && srcDir.isDirectory())){
    System.out.println("目录不存在");
    }
    File[] files = srcDir.listFiles(new FilenameFilter() {
    public boolean accept(File dir, String name) {
    return name.endsWith(".java");
    }
    });
    System.out.println(files.length);
    File destDir = new File("jad");
    if (!destDir.exists())
    destDir.mkdir();
    for (File f : files) {
    BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(f) );
    String destFileName = f.getName().replaceAll("\.java$", ".jad");// \.java$ 正则表达式 结尾为.java的文件
    BufferedOutputStream bufferedOutputStream =new BufferedOutputStream(new FileOutputStream(new File(destDir,destFileName)));
    copy(bufferedInputStream, bufferedOutputStream);
    bufferedInputStream.close();
    bufferedOutputStream.close();
    }
    }
    ​
    private static void copy(BufferedInputStream ips, BufferedOutputStream ops) throws Exception {
    int len = 0;
    byte[] buf = new byte[1024];
    while ((len = ips.read(buf)) != -1) {
    ops.write(buf, 0, len);
    }
    }
    View Code

    10、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”

    public static void main(String[] args) throws Exception {
    String str = "我a爱中华abc我爱哈奥def";
           //中文一个字占2个字节,UTF-8占3个字节。中文的字节码为负数。
    int num = trimGBK(str.getBytes("GBK"), 7);
    System.out.println(str.substring(0, num));
    }
    ​
    public static int trimGBK(byte[] buf, int n) {
    int num = 0;
    boolean bChineseFirstHalf = false;
    for (int i = 0; i < n; i++) {
    if (buf[i] < 0 && !bChineseFirstHalf) {
    bChineseFirstHalf = true;
    } else {
    num++;
    bChineseFirstHalf = false;
    }
    }
    return num;
    }
    View Code

    11、分别统计英文字符的数量,中文字符的数量,和数字字符的数量,假设字符中没有中文字符、英文字符、数字字符之外的其他特殊字符

    public static void main(String[] args) throws Exception {
    String str = "应该23vr输出我ABC而不是我ABC6tad73592汉的半个";
    int engishCount = 0;
    int chineseCount = 0;
    int digitCount = 0;
    ​
    for (int i = 0; i < str.length(); i++) {
    char ch = str.charAt(i);
    if (ch >= '0' && ch <= '9') {
    digitCount++;
    } else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
    engishCount++;
    } else {
    chineseCount++;
    }
    }
    System.out.println(engishCount + "***" + chineseCount + "****" + digitCount);
    }
    View Code

    12、字符串匹配算法

    String str1 ="abcdefg";
        String str2= "cde";
        char[] c1 = str1.toCharArray();
        char[] c2=str2.toCharArray();
        int i1=c1.length;
        int i2=c2.length;
        for (int i = 0; i < i1-i2; i++) {
            int j=0;
            while(j<i2&&c2[j]==c1[i+j]){
                j++;
                if(j==i2){
                    return 1;
                }
            }
        }
       return 0;

    13、打印*

    private static void printstart(){
            for(int i=1;i<=5;i++){//i--控制行
                for(int j=5-i;j>=0;j--){//j--控制空格的数量
                    System.out.print(" ");
                }
                for(int k=1;k<=2*i-1;k++){//k--控制*的数量
                    System.out.print("*");
                }
                System.out.println();//每循环一次换行
            }
        }

    14、计算1+11+111+1111+11111的和

    private static void Sum(){
            int a=0,sum=0;
            for(int n=1;n<=5;n++)
            {
                a=(a*10)+1;
                System.out.println(a);
                sum+=a;
            }
            System.out.print("sum="+sum);
        }

    15、水仙花数

    private static void shuixuanhua(){
            for(int i=100;i<1000;i++){  
                int ge  = i%10;  
                int shi = i/10%10;  
                int bai = i/10/10%10;  
                if(i == (ge*ge*ge+shi*shi*shi+bai*bai*bai)){  
                    System.out.println(i);  
                }  
            }        
        }

    16、map遍历

    private static void listmap(){
            Map<Integer, Integer> map=new HashMap<>();
            map.put(0, 1);
            map.put(2, 3);
            map.put(4, 5);
            map.put(6, 7);
            map.put(8, 9);
            for (Integer key :map.keySet()) {
                System.out.println(key);
            }
            for (Integer key :map.values()) {
                System.out.println(key);
            }
        }

     17、连接MySQL数据库

     private static void jdbc() {
            Connection conn = null;
            PreparedStatement preparedStatement = null;
            try {
                Class.forName("com.mysql.jdbc.Driver");
    conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "123");
                String sql = "select * from user";
                preparedStatement = conn.prepareStatement(sql);
                ResultSet resultSet = preparedStatement.executeQuery();
                while (resultSet.next()) {
                    String id = resultSet.getString(1);
                    String name = resultSet.getString(2);
                    Date time = resultSet.getDate(3);
                    System.out.println(id + name + time);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

     18 代码查错

    abstract class Name {
    private String name;
    public abstract boolean isStupidName(String name) {}
    }
    //错。abstract method必须以分号结尾,且不带花括号 
    //public abstract boolean isStupidName(String name);
    
    //**********************************************************
    public class Something {
      void doSomething () {
      private String s = "";
      int l = s.length();
      }
    }
    //错。局部变量前不能放置任何访问修饰符 (private,public,和protected)。final可以用来修饰局部变量
    
    //**********************************************************
    abstract class Something {
    private abstract String doSomething ();
    }
    //abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节。abstract method前也不能加final
    
    //*********************************************************
    public class Something {
    public int addOne(final int x) {
    return ++x;
    }
    }
    //错。int x被修饰成final,意味着x不能在addOne method中被修改。
    
    //**********************************************************
    public class Something {
       public static void main(String[] args) {
         Other o = new Other();
         new Something().addOne(o);
       }
       public void addOne(final Other o) {
        o.i++;
       }
    }
    class Other {
    public int i;
    }
    //正确。在addOne method中,参数o被修饰成final。如果在addOne method里我们修改了o的reference(比如: o = new Other();),那么如同上例这题也是错的。但这里修改的是o的member vairable(成员变量),而o的reference并没有改变
    //引用不能改变但是引用中对象的内容可以改变
    
    //**********************************************************
    class Something {
      int i;//正确,默认为0
      final int i;//错误,final int i =0; final修饰的没有默认值
      public void doSomething() {
        System.out.println("i = "+ i);
       }
    }
    
    //*********************************************************
    public class Something {
       public static void main(String[] args) {
         Something s = new Something();
         System.out.println("s.doSomething() returns " + doSomething());
       }
      public String doSomething() {
       return "Do something ...";
       }
    }
    //静态方法里不能调用非静态方法
    
    //**********************************************************
    interface A {
        int x = 0;
    }
    
    class B {
        int x = 1;
    }
    
    class C extends B implements A {
        public void pX() {
            System.out.println(x);//编译时报错
            //System.out.println(A.x);
            //System.out.println(super.x);
        }
        public static void main(String[] args) {
            new C().pX();
        }
    }
    
    //**********************************************************
    interface Playable {
        void play();
    }
    
    interface Bounceable {
        void play();
    }
    
    interface Rollable extends Playable, Bounceable {
        Ball ball = new Ball("PingPang");//默认为public static final Ball ball = new Ball("PingPang");
    }
    
    class Ball implements Rollable {
        private String name;
        public String getName() {
            return name;
        }
    
        public Ball(String name) {
            this.name = name;
        }
    
        public void play() {
             ball = new Ball("Football");//final修饰的对象,引用是不能被改变的。所以报错
            System.out.println(ball.getName());
        }
    }
    View Code

     

  • 相关阅读:
    ubuntu安装jdk的两种方法
    LeetCode 606. Construct String from Binary Tree (建立一个二叉树的string)
    LeetCode 617. Merge Two Binary Tree (合并两个二叉树)
    LeetCode 476. Number Complement (数的补数)
    LeetCode 575. Distribute Candies (发糖果)
    LeetCode 461. Hamming Distance (汉明距离)
    LeetCode 405. Convert a Number to Hexadecimal (把一个数转化为16进制)
    LeetCode 594. Longest Harmonious Subsequence (最长的协调子序列)
    LeetCode 371. Sum of Two Integers (两数之和)
    LeetCode 342. Power of Four (4的次方)
  • 原文地址:https://www.cnblogs.com/zhangjinru123/p/8596038.html
Copyright © 2011-2022 走看看