java基礎教程-面向對象(一)

来源:http://www.cnblogs.com/likailiche/archive/2016/01/14/5131960.html
-Advertisement-
Play Games

一、面向對象1.1java鍵盤輸入 1.1.1這種方法我認為是最簡單,最強大的,就是用Scanner類import java.util.Scanner; public static void main(String [] args) { Scanner sc = new Scanner(Sys...


一、面向對象

1.1 java鍵盤輸入

  1.1.1這種方法我認為是最簡單,最強大的,就是用Scanner類

import java.util.Scanner;

  public static void main(String [] args) {

  Scanner sc = new Scanner(System.in);

  System.out.println(“請輸入你的姓名:”);

  String name = sc.nextLine();//字元串輸入

  System.out.println(“請輸入你的年齡:”);

  int age = sc.nextInt();//整型輸入

  System.out.println(“請輸入你的工資:”);

  float salary = sc.nextFloat();//浮點型輸入

  System.out.println(“你的信息如下:”);

  System.out.println(“姓名:”+name+“\n”+“年齡:”+age+“\n”+“工資:”+salary);

  }

  這段代碼已經表明,Scanner類不管是對於字元串還是整型數據或者float類型的變數,只需做一點小小的改變,就能夠實現功能!無疑他是最強大的

  1.1.2

while(a.hasNext())
  {
   System.out.println("你輸入的是:"+a.nextInt());
  }

hasNext()是Scanner類的一個方法,判斷是否有輸入,有輸入項,a .hasNext()為true,沒有輸入項,a .hasNext()為false

1.2.數組

  定義數組  int [][] a=new int [10][10];

1.3.java變數命名規則

  1、 類名:每個單詞首字母大寫,例UserName

  2、 方法名和變數名:第一個單詞首字母小寫,其他單詞首字母大寫

    例:getInfor(),getInfor

    註:類方法的第一個單詞必須是動詞

       構造方法(用來完成對對象的初始化):名字必須與類的名字相同

  3、 包名:全部小寫,例:example

  4、 常量:所有字母全部大寫,如果多個單片語成,通常用_連接

    例:MIN_VALUE,PI

1.4.Java記憶體解析

  形參和局部變數在棧中分配記憶體空間 ,運行完自動釋放,堆中的記憶體程式員釋放,分析記憶體解析時,要從main()開始一步一步分析。在函數中定義的一些基本類型的變數和對象的引用變數都在函數的棧記憶體中分配。堆記憶體用來存放由new創建的對象和數組。 在堆中分配的記憶體,由Java虛擬機的自動垃圾回收器來管理。引用變數是普通變數,定義時在棧中分配記憶體,引用變數在程式運行到作用域外釋放。而數組&對象本身在堆中分配,即使程式運行到使用new產生數組和對象的語句所在地代碼塊之外,數組和對象本身占用的堆記憶體也不會被釋放,數組和對象在沒有引用變數指向它的時候,才變成垃圾,不能再被使用,但是仍然占著記憶體,在隨後的一個不確定的時間被垃圾回收器釋放掉。這個也是java比較占記憶體的主要原因,實際上,棧中的變數指向堆記憶體中的變數,這就是 Java 中的指針! 

  靜態變數(static)存放在數據區

  new創造對象,會直接執行構造函數,

  首先我們先來講解一下記憶體中的各個區域。

     stack(棧):存放基本類型的數據和對象的引用,即存放變數。

      如果存放的事基本類型的數據(非靜態變數),則直接將變數名和值存入stack中的記憶體中;

      如果是引用類型,則將變數名存入棧,然後指向它new出的對象(存放在堆中)。

    heap(堆):存放new產生的數據。

    data segment:分為靜態域和常量域。

      靜態域:

        存放在對象中用static定義的靜態成員(即靜態變數,同理,如果該靜態變數是基本類型則將變數名和值存入靜態域,如果是引用類型則指向new出的對象)。

      常量池:

        常量池指的是在編譯期被確定,並被保存在已編譯的.class文件中的一些數據。除了包含代碼中所定義的各種基本類型(如int、long等等)和對象型 (如String及數組)的常量值(final)還包含一些以文本形式出現的符號引用,比如:類和介面的全限定名;欄位的名稱和描述符;方法和名稱和描述符。

  註:大家要註意String類型不是基本數據類型,所以它可以創建對象,並且它的值是放在常量池中的。

1.5.Static

  每new一個對象,成員變數都會賦予新的值,而static成員變數是唯一的,固定不變的,而且對所有成員共用,訪問的靜態變數占用統一塊記憶體。

1.6.包

   包的命名   對於公司,  com.company.lksk.sk

    調用包 用inport 包名.*  (調用包下的所有類)

           或 import 包名.類名  (調用特定類)

    調用時 調用的包必須與程式在相同目錄下,而且類必須是/com/company/lksk/sk/文件夾下  或者class文件的最上層包的父目錄(com文件的父目錄)位於classpath下

    執行一個類,需要寫全包名,即java com.company.lksk.sk.Dog

    在jdk中的jre/lib文件夾中rt.jar,包含java自帶的各種類,而Java.lang包中的類可以直接使用(包括System.class String.class等),不需要import,其餘均需要import

    生成jar包,目錄調至class文件最上層包的父目錄,執行jar –cvf test.jar  *.*(jar包的名字)

1.7. Java SE EE ME區別:

  Java SE=Java Standard Edition
  Java EE=Java Enterprise Edition
  Java ME=Java Mobile Edition

  SE(標準版)主要用於桌面程式,控制台開發(JFC)
  EE(企業版)企業級開發(JSP,EJB):網站開發和基於 b/s模式的編程
  ME(微縮版)嵌入式開發(手機,小家電):手機軟體游戲編程

  1. Java SE(Java Platform,Standard Edition)。Java SE 以前稱為 J2SE。它允許開發和部署在桌面、伺服器、嵌入式環境和實時環境中使用的 Java 應用程式。Java SE 包含了支持 Java Web 服務開發的類,併為 Java Platform,Enterprise Edition(Java EE)提供基礎。

  2. Java EE(Java Platform,Enterprise Edition)。這個版本以前稱為 J2EE。企業版本幫助開發和部署可移植、健壯、可伸縮且安全的伺服器端 Java 應用程式。Java EE 是在 Java SE 的基礎上構建的,它提供 Web 服務、組件模型、管理和通信 API,可以用來實現企業級的面向服務體繫結構(service-oriented architecture,SOA)和 Web 2.0 應用程式。

  3. Java ME(Java Platform,Micro Edition)。這個版本以前稱為 J2ME。Java ME 為在移動設備和嵌入式設備(比如手機、PDA、電視機頂盒和印表機)上運行的應用程式提供一個健壯且靈活的環境。Java ME 包括靈活的用戶界面、健壯的安全模型、許多內置的網路協議以及對可以動態下載的連網和離線應用程式的豐富支持。基於 Java ME 規範的應用程式只需編寫一次,就可以用於許多設備,而且可以利用每個設備的本機功能。

1.8.Java中random類的用法

1.8.1Random類 (java.util) 

  Random類中實現的隨機演算法是偽隨機,也就是有規則的隨機。在進行隨機時,隨機演算法的起源數字稱為種子數(seed),在種子數的基礎上進行一定的變換,從而產生需要的隨機數字。

  相同種子數的Random對象,相同次數生成的隨機數字是完全相同的。也就是說,兩個種子數相同的Random對象,第一次生成的隨機數字完全相同,第二次生成的隨機數字也完全相同。這點在生成多個隨機數字時需要特別註意。

  Random類中的方法比較簡單,每個方法的功能也很容易理解。需要說明的是,Random類中各方法生成的隨機數字都是均勻分佈的,也就是說區間內部的數字生成的幾率是均等的。下麵對這些方法做一下基本的介紹: 

1.8.2、Random類中的常用方法

  a、public boolean nextBoolean()

    該方法的作用是生成一個隨機的boolean值,生成true和false的值幾率相等,也就是都是50%的幾率。

  b、public double nextDouble()

    該方法的作用是生成一個隨機的double值,數值介於[0,1.0)之間。 

  c、public int nextInt() 

    該方法的作用是生成一個隨機的int值,該值介於int的區間,也就是-231到231-1之間。

    如果需要生成指定區間的int值,則需要進行一定的數學變換,具體可以參看下麵的使用示例中的代碼。

  d、public int nextInt(int n)

    該方法的作用是生成一個隨機的int值,該值介於[0,n)的區間,也就是0到n之間的隨機int值,包含0而不包含n。

    如果想生成指定區間的int值,也需要進行一定的數學變換,具體可以參看下麵的使用示例中的代碼。

  e、public void setSeed(long seed)

    該方法的作用是重新設置Random對象中的種子數。設置完種子數以後的Random對象和相同種子數使用new關鍵字創建出的Random對象相同

  方法舉例:

    Random r = new Random();

    生成[1,2.5)區間的小數:double d3 = r.nextDouble() * 1.5 + 1;

    生成[-3,15)區間的整數:int n4 = r.nextInt(18) - 3;

1.9.多態

    多態實際上就是就是,調用方法時,如果方法重寫了,實際當中調用哪個方法,要看你new的對象是什麼。

    動態綁定是指在執行期間(而非編譯期間)判斷所引用對象的實際類型,根據實際類型調用其相應的方法。

   多態的三個必要條件:1、要有繼承2、要有重寫3、父類引用指向子類對象。當三個條件滿足,調用父類中的重寫的方法時,實際上new的什麼對象,就調用該對象的方法。

1.10.abstract類/object類

  abstrcat抽象方法是用來重寫的,本身只做定義,在子類中重寫,抽象方法必須位於抽象類中。抽象類必須被繼承,抽象類不能實例化;抽象方法必須被重寫,抽象方法只需聲明,不需實現。子類繼承抽象類時,必須重寫抽象類中的方法。

abstract class Animal(){

   public abstract void enjoy();

}

  object 類中的equals函數必須是指向同一引用時,才會返回true,所以一般要重寫equals函數。 

1.11.final

  final 的變數值不能改變,final的方法不能重寫,final的類不能繼承

1.12.介面

  介面是抽象類和常量定義的集合,實際上介面是一種特殊的抽象類,這種抽象類只包含常量方法的定義,而沒有變數和方法的實現。介面方法的實現必須用class去implements

public interface Runner(){
public static final int id = 1;

public void start();

public void run();

}

  介面中聲明的屬性只能是public static final(不管你寫不寫),方法只能是抽象方法(不管你寫不寫),而且必須是public。

  介面的實現用implements  

例 interface Singer(){

Public void sing ();

Public void sleep():
}

class Student implements Singer{

}

  類之間只能單繼承,一個子類只能繼承一個父類,而一個類可以實現多個無關的介面,且多個無關的類可以實現同一個介面。

  例:class Teacher implements Singer,Painter(){}

  class Teacher extends School implements Singer,Painter(){}

  當介面繼承另一個介面時,實現介面的類,必須重寫兩個介面中所有的方法。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • python 從資料庫表生成model找了很久才找到這個,我是新手...現在已有建好的資料庫,需要基於原有數據做數據分析的web應用,我選擇python+Tornado,由於不想寫SQL語句,就想偷個懶1、安裝工具1 ningjian@freegodly:~/code/py/django/logcl...
  • 1.檢測Apache是否支持mod_rewrite通過php提供的phpinfo()函數查看環境配置,通過Ctrl+F查找到“Loaded Modules”,其中列出了所有apache2handler已經開啟的模塊,如果裡面包括“mod_rewrite”,則已經支持,不再需要繼續設置。如果沒有開啟“...
  • erase()方法是刪除iterator指定的節點 但是要註意的是在執行完此函數的時候iterator也被銷毀了 這樣的話關於iterator的操作就會報錯 以下是關於erase()方法的正確使用正確使用方法1 : std::list List;std::list::iterator itList;...
  • Java使用jdbc連接Hive比較簡單,但是Hive的計算能力相對於其它資料庫的SQL而言較弱,要完成非常規的計算需要將數據取出後用Java進一步計算,編程比較麻煩。使用集算器配合Java編程,可以減少Java使用Hive時要進行複雜計算工作量。下麵我們通過例子來看一下具體作法:Hive中的or....
  • package com.pb;import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import jav...
  • https://docs.spring.io/spring-security/site/docs/current/reference/html/headers.html#headers-frame-options
  • JS中 邏輯或 || 邏輯與 && 的使用方法總結 //1、在if判斷中 //if(1==1 || 2==3){}//->兩個條件中只要有一個條件為真,整體就為真 "或者" //if(1==1 && 2==3){}//->兩個條件中只有條件都為真,整體就為真 "並且" //...
  • 之前一直是斷斷續續地進行學習,學了好久之後發覺自己還只是入門水平,於是乎,今日下定決心,以後要系統地學習,並對每天的學習都作一總結。*args和**args的區別:意思就是1還是參數a的值,args表示剩餘的值,kwargs在args之後表示成對鍵值對。程式如下:1 def test(a,*args...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...