Java基础

作者: dpengwang | 来源:发表于2018-05-17 20:57 被阅读95次

变量类型

  • 部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
  • 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
  • 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。

构造方法

每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。

在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法.

public class student(){
    public student(){
    }
    //上下是两种不同的构造方法
    public student(String name)
}

类的声明

  • 一个源文件中只能有一个public类
  • 一个源文件可以由多个非public类
  • 源文件的名称应该和public类的类名保持一致
  • package有的话要放在第一行
  • import有的话放在紧接着package之后

基本数据类型

java的两大数据类型

  • 内置数据类型
  • 引用数据类型(即自己创建的类,一旦申明就不能改变,不像内置的可以强制类型转化)

内置数据类型:byte(8)、short(16)、int(32)、long(64),float(32)、double(64)、boolean、char

查看数据类型的长度和最大最小值

System.out.println(Integer.SIZE)
System.out.println(Integer.MIN_VALUE)
System.out.println(Integer.MAX_VALUE)

Java中常量用final声明,变量名一般用大写

变量类型

局部变量:声明在方法构造方法或者语句块,执行完被销毁,访问修饰符不能用于局部变量,局部变量是在栈上分配的,局部变量没有默认值,必须初始化后才能使用

实例变量(成员变量):在类中在方法、构造方法之外,当一个对象被实例化后,实例变量就跟着确定了。访问修饰符可以修饰实例变量。实例变量有默认值,数值型变量默认值为0,布尔型为false,引用类型变量为null

类变量(静态变量):在类中以static关键字声明,但必须在方法、构造方法和语句块之外。静态变量除了被声明为常量之外很少被使用,很少单独用static声明的。静态变量在程序开始时创建,在程序结束时销毁。通过classname.variablename形式访问

Java修饰符

  • 访问修饰符
    • 默认的,也称为default,在同一包内可见,不使用任何修饰符。
    • 私有的,以private修饰符指定,在同一类内可见。
    • 共有的,以public修饰符指定,对所有类可见。
    • 受保护的,以protected修饰符指定,对同一包内的类和所有子类可见。
  • 非访问修饰符
    • static :创建类方法和类变量,静态方法不能使用类的非静态变量。静态变量也成为类变量,局部变量不能申明为static变量
    • final:修饰类、方法和变量,final修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。final对象的应用不能,但里面的值可以变
    • Abstract修饰符,用来创建抽象类和抽象方法。
    • Synchronized和volatile修饰符,主要用于线程的编程。

Java运算符

位运算:

&:按位与

^:异或

~:按位取补

<< >>:按位左移右移

>>> :按位右移补0

逻辑运算:

&&:逻辑与

|| :逻辑或

! :逻辑非

条件运算符(?:)

variavble x= (expression)? value if true :value if false
b =(a==1)? 20:30

Java循环结构

  • while循环

  • do。。while循环

  • for循环,for循环除了常用的形式外,还有增强for循环

    for(声明语句:表达式)
    {
       //代码句子
    }
    int [] numbers ={10,20,30,40};
    for(int x:numbers){
        System.out.print(x);
    }
    

Java分支结构

if...else:

switch: 语句中的变量类型只能为byte、short、int 或者char

switch(expression){
    case value:
         //xxx
         break;
    case value:
         //xxxx
         break;
    default:
         //可选
}

Java Number类

使用内置数据类型的时候,使用的 是对象而不是内置数据了类型。Java语言为每一个内置数据类型提供了对应的包装类。

所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类Number的子类。这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。Number类属于java.lang包。

public class Test{

   public static void main(String args[]){
      Integer x = 5; // boxes int to an Integer object
      x =  x + 10;   // unboxes the Integer to a int
      System.out.println(x); 
   }
}

Number类有很多方法,比如 Integer a = 10,可以使用a.toString()返回字符串

Java Character类

java语言为内置数据类型char提供了包装类Character类,可以使用Character的构造方法创建一个Character类对象,例如:

//装箱
Character ch =new Character('a');
//可以对ch使用很多方法,比如isLetter(),isWhitespace()
//拆箱
ch =ch+'a'

Java String类

创建字符串

String greeting  = "hello world"
char[] helloArray ={'h','e','l','l','o'};
String hellostring = new String(helloArray)

获取字符串长度:

String test ="hello world"

拼接两个字符串:或者用加号

string1.concat(string2)

创建格式化字符串:

这样:

System.out.printf("my name is %s,%d years old",name,age);

或者

String fs;
fs =String.format("my name is %s,%d years old",name,age);
System.out.printf(fs)

下面是String支持的常用函数

1 xxxValue()将number对象转换为xxx数据类型的值并返回。
2 compareTo()将number对象与参数比较。
3 equals()判断number对象是否与参数相等。
4 valueOf()返回一个Integer对象指定的内置数据类型
5 toString()以字符串形式返回值。
6 parseInt()将字符串解析为int类型。
7 abs()返回参数的绝对值。
8 ceil()对整形变量向左取整,返回类型为double型。
9 floor()对整型变量向右取整。返回类型为double类型。
10 rint()返回与参数最接近的整数。返回类型为double。
11 round()返回一个最接近的int、long型值。
12 min()返回两个参数中的最小值。
13 max()返回两个参数中的最大值。
14 exp()返回自然数底数e的参数次方。
15 log()返回参数的自然数底数的对数值。
16 pow()返回第一个参数的第二个参数次方。
17 sqrt()求参数的算术平方根。
18 sin()求指定double类型参数的正弦值。
19 cos()求指定double类型参数的余弦值。
20 tan()求指定double类型参数的正切值。
21 asin()求指定double类型参数的反正弦值。
22 acos()求指定double类型参数的反余弦值。
23 atan()求指定double类型参数的反正切值。
24 atan2()将笛卡尔坐标转换为极坐标,并返回极坐标的角度值。
25 toDegrees()将参数转化为角度。
26 toRadians()将角度转换为弧度。
27 random()返回一个随机数。

Java StingBuffer 和String Builder

当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类

StringBuilder方法不是线程安全的,但是比StringBuffer更有速度优势,所以大多情况下都使用StringBuilder。如果应用程序要求线程安全,那么就要使用StringBuffer

StringBuffer支持的主要方法:

1 public StringBuffer append(String s)将指定的字符串追加到此字符序列。
2 public StringBuffer reverse() 将此字符序列用其反转形式取代。
3 public delete(int start, int end)移除此序列的子字符串中的字符。
4 public insert(int offset, int i)将 int 参数的字符串表示形式插入此序列中。
5 replace(int start, int end, String str)使用给定 String 中的字符替换此序列的子字符串中的字符。

自身调用就可以

public class Stringbuffertest {
    public static void main(String []args){
        StringBuffer aStringBuffer = new StringBuffer("qwer");
        aStringBuffer.append("da");
        System.out.println(aStringBuffer);
        aStringBuffer.reverse();
        System.out.println(aStringBuffer);      
    }
}

Java数组

数组声明:

datatType[] arrayname;
或者
dataType arrayname[];
eg:
double[] mylist;
或
double mylist[];

数组创建:

arryanem = new datatype[arraySize];

数组声明加创建:

dataType[] arrayname = new dataType[arraySize]
or
dataType[] arrayname ={value0,value1,value2}

数组的foreach循环

int[] test = {1,2,3,4,5};
for(int i:test){
    System.out.print(i);
}

Arrays类:

java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能:

  • 给数组赋值:通过fill方法。
  • 对数组排序:通过sort方法,按升序。
  • 比较数组:通过equals方法比较数组中元素值是否相等。
  • 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。
int[] test ={1,2,3,4,5};
int index =Arrays.binarySearch(test,3);
Arrays.fill(test, 0);
Arrays.sort(test);

Java日期和时间

import java.util.Date;  
public class DateDemo {
   public static void main(String args[]) {
       // 初始化 Date 对象
       Date date = new Date();       
       // 使用 toString() 函数显示日期时间
       System.out.println(date.toString());
   }
}

使用SimpleDateFormat格式化日期:

import java.util.*;
import java.text.*;
public class DateDemo {
   public static void main(String args[]) {
      Date dNow = new Date( );
      SimpleDateFormat ft = 
      new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
      System.out.println("Current Date: " + ft.format(dNow));
   }
}

prinf格式化日期 用%t

Java休眠(sleep)毫秒

Thread.sleep(5*60*10);

测量时间

long start = System.currentTimeMillis( );
long end = System.currentTimeMillis( );
long diff = end - start;

Calendar类:(用的时候再查吧)

Calendar c = Calendar.getInstance();//默认是当前日期
c.set(2009,6-1,12)

Java正则表达式

跟python差不多,创建pattern-->创建pattern对象-->创建matcher对象-->查找

语法用的时候查

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Zebds {
    public static void main(String []args){
        String line ="this order was placed for Q3000! ok?";
        String pattern ="(.*)(\\d+)(.*)";
        Pattern r =Pattern.compile(pattern);
        Matcher m = r.matcher(line);
        if(m.find()){
            System.out.println("Found value: " + m.group(0) );
             System.out.println("Found value: " + m.group(1) );
             System.out.println("Found value: " + m.group(2) );
        }
        else{
            System.out.println("error");
        }
    }
}

Java方法

可变参数:方法申明中,在指定参数类型后加一个省略号(...),一个方法中只能有一个可变参数,任何普通参数必须在它之前声明

public class ChangeValue {
    public  static void main(String args[]){    
        sayhello(10,"wer","fff");
    }   
    public  static void sayhello(int age,String...agrs){
        System.out.printf("i am %d years old and i am %s,and %s",agrs[0],agrs[1]);
    }
}

finalize()方法:Java允许定义这样的方法,它在对象被垃圾收集器析构(回收)之前调用,这个方法叫做finalize( ),它用来清除回收对象。finalize()方法写在要被实例化的类中,当实例对象被回收的时候被调用。

finalize()一般格式是:

protected void finalize()
{
   // 在这里终结代码
}

关键字protected是一个限定符,它确保finalize() 方法不会被该类以外的代码调用。Java的内存回收可以由JVM来自动完成。如果你手动使用,则可以使用上面的方法。

eg:

class Student{
    String name;
    public Student(String aname){
        name =aname;
        System.out.printf("this is student %s",this.name);
    }
    protected void finalize() throws java.lang.Throwable{
        super.finalize();
        System.out.printf("%s is being exectude",this.name);    
    }   
}
public class Finalizetest {
    public static void main(String args[]){
        Student aStudent = new Student("wdp");
        Student bStudent = new Student("ws");
        aStudent =bStudent =null;
        System.gc();    
    }
}

相关文章

  • Java 基础

    Java 基础01Java开发入门 Java 基础02Java编程基础 Java 基础03面向对象 Java 基础...

  • 技术体系

    一,java核心 java基础,jvm,算法,多线程,设计模式 Java基础:java基础相关,全栈java基础 ...

  • 面试题汇总

    1.Java基础面试问题 Java基础之基础问题 Java基础之面向对象 Java基础之数据结构 Java基础之I...

  • 【Android】知识点汇总,坚持原创ing

    Android基础 Java基础 Java基础——Java内存模型和垃圾回收机制 语法基础 语法基础——C语法基础...

  • Java基础:反射

    反射注解动态代理相关阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 ...

  • Java基础:注解

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 1. 概述 注解...

  • Java基础:动态代理

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 概述 在运行时,...

  • Java 集合类原理

    Java基础——HashMap源码分析 Java基础——HashSet源码分析 Java基础——HashTable...

  • Java基础:类加载器

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 1. 什么是类加...

  • java基础(一)-String、StringBuffer、St

    java基础-String、StringBuffer、StringBuilder java基础小白,初学java,...

网友评论

本文标题:Java基础

本文链接:https://www.haomeiwen.com/subject/qlvidftx.html