Secrètement, étudiant Oubliez et google pour vous-même
nom de la constante du type de données final=valeur
null Il n'y a pas de destination de référence Une chaîne vide ("") n'est pas nulle car il existe une chaîne vide à la destination de référence. → Les types primitifs n'ont pas d'état nul
Avec null, l'utilisation de la méthode equals déclenche une exception. (NullPointerException) Utilisez l'opérateur "==".
Utilisez la méthode "isEmpty"
Peut être créé en étendant une classe existante Les sous-classes héritent des champs et des méthodes des superclasses. Utilisez le mot-clé super pour accéder aux méthodes de superclasse Utilisez le mot clé this pour accéder aux méthodes de sous-classe. Il existe une superclasse et plusieurs sous-classes.
super.hoge();
Implémenter le nom de la méthode parent, la valeur de retour et les arguments correspondants dans la classe enfant Il semble bon d'ajouter explicitement "@Override".
//Classe enfant
@Override
void hoge(){
}
La méthode remplacée est prioritaire sur la sous-classe.
Classes qui ne peuvent pas créer d'instances
abstract class TestClass {
void test() {
System.out.println("TEST");
}
}
public class SampleProgram {
public static void main(String[] args) {
//Erreur de compilation: impossible de créer une instance de type TestClass
TestClass tc = new TestClass();
}
}
--Une méthode qui ne contient pas d'instruction dans la méthode
abstract class TestClass {
//Méthode ordinaire
void test() {
System.out.println("TEST");
}
//Méthode abstraite
abstract void test2();
}
abstract class TestClass {
//Erreur de compilation: la méthode abstraite ne spécifie pas le corps
abstract void test() {
System.out.println("TEST");
}
}
Même si vous héritez d'une classe abstraite, si vous définissez une sous-classe comme classe abstraite, vous n'avez pas besoin de la remplacer. ..
abstract class TestClass {
//Méthode ordinaire
void test() {
System.out.println("TEST");
}
//Méthode abstraite
abstract void test2();
}
//Aucune erreur de compilation
abstract class subClass extends TestClass {
}
//Erreur de compilation: le type subClass est une méthode abstraite héritée TestClass.test2()Doit être implémenté
class subClass extends TestClass {
}
--Définir les méthodes qu'une classe devrait avoir
interface testIf{
int test();
void test2(String msg);
}
interface testIf{
void test2(String msg);
}
//Erreur de compilation: le test de type est une méthode abstraite héritée testIf.test2(String)Doit être implémenté
class test implements testIf{
}
//Erreur de compilation: impossible de réduire la visibilité des méthodes héritées de testIf
class test implements testIf{
void test2(String msg) {
System.out.println(msg);
}
}
//Aucune erreur de compilation
class test implements testIf{
public void test2(String msg) {
System.out.println(msg);
}
}
interface testIf1{
void test1(String msg);
}
interface testIf2{
int test2();
}
class test implements testIf1, testIf2{
public void test1(String msg) {
System.out.println(msg);
}
public int test2() {
return 1;
}
}
interface testIf1{
int HOGE = 1;
public static final String HOGE2 = "constant";
}
class test implements testIf1{
int i = testIf1.HOGE;
//Erreur de compilation: test de champ finalIf1.Ne peut pas être affecté à HOGE
//testIf1.HOGE = 1;
void testPrint() {
System.out.println(testIf1.HOGE2);
}
}
public class SampleProgram {
public static void main(String[] args) {
test t = new test();
t.testPrint();
}
}
interface testIf1{
int HOGE = 1;
public static final String HOGE2 = "constant";
void test();
void test2();
}
//Héritage d'interface
interface testIf2 extends testIf1{
void test();
}
//Erreur de compilation: le test de type est une méthode abstraite héritée testIf1.test2()Doit être implémenté
class test implements testIf2{
@Override
public void test() {
//TODO talon de méthode généré automatiquement
}
}
//Aucune erreur de compilation
class test implements testIf2{
@Override
public void test() {
//TODO talon de méthode généré automatiquement
}
@Override
public void test2() {
//TODO talon de méthode généré automatiquement
}
}
Même si l'interface parent et l'interface enfant ont la même définition de méthode, cela ne sera pas traité comme une erreur. .. Cela va être une source de confusion.
En japonais, cela signifie polymorphisme (effectue divers mouvements).
import java.util.ArrayList;
import java.util.List;
interface TestIf{
public abstract void run();
}
class TestAAA implements TestIf{
String myClassName = "TestAAA";
@Override
public void run() {
//TODO talon de méthode généré automatiquement
System.out.println(myClassName);
}
}
class TestBBB implements TestIf{
String myClassName = "TestBBB";
@Override
public void run() {
//TODO talon de méthode généré automatiquement
System.out.println(myClassName);
}
}
public class SampleProgram {
public static void main(String[] args) {
//Des collections et des tableaux de types d'interface sont disponibles
List<TestIf> list = new ArrayList<TestIf>();
TestIf[] array = new TestIf[2];
//Définir chaque instance de la collection
list.add(new TestAAA());
list.add(new TestBBB());
//Définir chaque instance du tableau
array[0] = new TestAAA();
array[1] = new TestBBB();
System.out.println("collection");
for(TestIf ti: list) {
ti.run();
}
System.out.println("Tableau");
for(int i = 0; i < array.length; i++) {
array[i].run();
}
}
}
array2 devient une référence à array1. La réécriture des éléments de array2 affecte également array1. L'inverse est également vrai.
int[] array1 = {1,2,3};
int[] array2 = array1;
Vous pouvez copier la valeur à l'aide de la méthode de clonage. La même chose s'applique à la collection.
int[] array2 = array1.clone();
Parfois, la méthode de clonage ne suffit pas. Si l'élément est un type d'objet au lieu d'un type primitif Comme le type d'objet n'est pas une valeur mais une destination de référence en tant qu'élément, la valeur à la destination de référence n'est pas copiée. C'est ce qu'on appelle une copie superficielle. Cela signifie que plusieurs objets partageront la même valeur. Copie profonde pour copier jusqu'à la valeur référencée. La quantité à copier dépend du programme.
semble difficile. ..
Spécifiez pour forcer le type en insérant le type entre "<" et ">" et en le notant.
Seul le type String peut être saisi.
List<String> list = new ArrayList<String>();
Un message d'avertissement apparaît sur Eclipse, mais il peut être utilisé. Étant donné que le type de données n'est pas spécifié, tout autre élément que le type primitif peut être entré.
List list = new ArrayList();
List list = new ArrayList();
List<String> list2 = new ArrayList<String>();
//Le casting est compliqué
System.out.println(((String) list.get(0)).length());
//Peut être utilisé comme un type de chaîne normal
System.out.println(list2.get(0).length());
Certes, il peut être plus facile d'utiliser les génériques. Eclipse est excellent cependant.
Nom de la séquence.length
public class SampleProgram {
public static void main(String[] args) {
int[] box = {0,1,2,3,4,5,6,7,8,9};
for(int i = 0; i < 10; i++) {
if(i == 5) {
System.out.println(i+1+":"+box[i]+"_continue");
continue;
}else if(i == 7) {
System.out.println(i+1+":"+box[i]+"_break");
break;
}
System.out.println(i+1+":"+box[i]);
}
}
}
//résultat
1:0
2:1
3:2
4:3
5:4
6:5_continue
7:6
8:7_break
public class SampleProgram {
public static void main(String[] args) {
int[] box = {0,1,2,3,4,5,6,7,8,9};
int i = 0;
while(i < 10) {
System.out.println(i+1+":"+box[i]);
i++;
}
}
}
public class SampleProgram {
public static void main(String[] args) {
int[] box = {0,1,2,3,4,5,6,7,8,9};
int i = 0;
do {
System.out.println(i+1+":"+box[i]);
i++;
}while(i < 10);
}
}
Je n'ai pas vu faire ~ depuis longtemps ... À mesure que le nombre d'indices augmente, le stock de noms s'épuise. ..
import java.util.HashSet;
import java.util.Set;
public class SampleProgram {
public static void main(String[] args) {
//Ne pas autoriser les valeurs en double
//Il n'y a aucune garantie de commande
Set<String> hs = new HashSet<String>();
hs.add("blanc");
hs.add("rouge");
hs.add("blanc");
hs.add("vert");
int[] array = {1,2,3,1};
//HashSet n'a pas de méthode get
// for(int i = 0; i < hs.size(); i++) {
// System.out.println(hs.(i));
// }
//Extension de la déclaration
for(String item : hs) {
System.out.println(item);
}
for(int i : array) {
System.out.println(i);
}
}
}
//résultat
vert
rouge
blanc
1
2
3
1
Difficile ...
public class TestMain {
public static void main(String[] args) {
List<String> cities = new ArrayList<String>();
cities.add("Kyoto");
cities.add("Osaka");
cities.add("Aichi");
System.out.println("Boucle 1");
for(int i = 0; i < cities.size(); i++) {
System.out.println(cities.get(i));
}
System.out.println("Boucle 2");
for(Iterator<String> ite = cities.iterator(); ite.hasNext();) {
System.out.println(ite.next());
}
System.out.println("Boucle 3: Extension pour boucle");
for(String city : cities) {
System.out.println(city);
}
System.out.println("Boucle 4:");
cities.forEach(new Consumer<String>() {
public void accept(final String citiy) {
System.out.println(citiy);
}
});
System.out.println("Boucle 5: type Lambda");
cities.forEach((final String city) -> System.out.println(city));
System.out.println("Boucle 6: type Lambda");
cities.forEach(System.out::println);
}
}
map
import java.util.HashMap;
import java.util.Map;
public class SampleProgram {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>(){
{
put("001","rouge");
put("002","Bleu");
put("003","vert");
}
};
//valeur
for(String item : map.values()) {
System.out.println(item);
}
//Clé
for(String item : map.keySet()) {
System.out.println(item);
}
}
}
Écrivez le code source avec désinvolture avec Sakura Editor ou Notepad
javac hoge.java
Et compilez avec désinvolture Je n'avais pas réalisé que j'étais en train d'appuyer sur un bouton sur Eclipse. Après avoir compilé manuellement le code source créé sur Eclipse sous DOS
//Code source
public class SampleProgram {
public static void main(String[] args) {
System.out.println("Hoge");
}
}
//résultat
C:\MyWork\>javac SampleProgram.java
SampleProgram.java:6:Erreur:Ce caractère ne peut pas être mappé au codage MS932
System.out.println("縺 縺?");
^
1 erreur
C:\MyWork\>
Cela se produit car le fichier source est "UTF-8" et le codage par défaut de Windows est "MS932". Si vous ne spécifiez pas le codage lors de la compilation avec javac, il sera compilé avec le codage par défaut de JVM (?). Si l'environnement est Windows et que le codage du fichier est "UTF-8"
javac -encoding utf8 SampleProgram.java
Ensuite, vous pouvez le compiler en toute sécurité.
import java.util.Properties;
import java.util.Enumeration;
class sampleEncoding{
public static void main(String args[]){
System.out.println(System.getProperty("file.encoding"));
}
}
L'encodage par défaut est un programme Java et semble avoir un effet sur l'entrée et la sortie. Si vous ne spécifiez pas l'encodage du fichier lors de la lecture du fichier Il semble que l'encodage par défaut soit utilisé Dans un environnement où le codage par défaut est "utf8" Si le fichier à lire est "euc", vous devez spécifier le codage Provoque des caractères déformés.
Si vous modifiez le codage par défaut à l'avance, vous pouvez modifier le code source et le fichier d'entrée. Même si vous ne le faites pas, les caractères ne seront pas déformés et vous pourrez compiler.
Pour les fenêtres REM
set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8
C:\MyWork>javac SampleProgram.java
SampleProgram.java:6:Erreur:Ce caractère ne peut pas être mappé au codage MS932
System.out.println("縺 縺?");
^
1 erreur
C:\MyWork>set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8
C:\MyWork>javac SampleProgram.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
C:\MyWork>
Il semble y avoir une erreur lorsqu'il est converti en interne en binaire et calculé
Il semble utiliser la classe BigDecimal. Il semble calculer sans convertir en binaire.
import java.math.BigDecimal;
public class SampleProgram {
public static void main(String[] args) {
double xx = 1.0;
double yy = 0.9;
System.out.println(xx - yy);
System.out.println(xx / yy);
BigDecimal x = new BigDecimal("1.0");
BigDecimal y = new BigDecimal("0.9");
System.out.println(x.subtract(y));
System.out.println(x.divide(y, 2, BigDecimal.ROUND_UP));
System.out.println(x.divide(y, 2, BigDecimal.ROUND_DOWN));
System.out.println(x.divide(y, 2, BigDecimal.ROUND_HALF_UP));
System.out.println(x.divide(y, 3, BigDecimal.ROUND_HALF_DOWN));
System.out.println(x.divide(y, 2, BigDecimal.ROUND_HALF_UP));
System.out.println(x.divide(y, 3, BigDecimal.ROUND_HALF_DOWN));
}
}
//résultat
0.09999999999999998
1.1111111111111112
0.1
1.12
1.11
1.11
1.111
1.11
1.111
Quelle est la différence entre BigDecimal.ROUND_HALF_UP et BigDecimal.ROUND_HALF_DOWN? À la suite de la réception des commentaires et du réexamen BigDecimal.ROUND_HALF_UP est arrondi BigDecimal.ROUND_HALF_DOWN est arrondi était. C'est complètement différent. .. ..
import java.math.BigDecimal;
import java.text.DecimalFormat;
public class SampleProgram {
public static void main(String[] args) {
DecimalFormat format = new DecimalFormat("#.#");
BigDecimal x = new BigDecimal("10.55");
BigDecimal xx = x.setScale(1, BigDecimal.ROUND_HALF_UP);
System.out.println("Arrondi à la deuxième fraction: " + format.format(xx));
BigDecimal xxx = x.setScale(1, BigDecimal.ROUND_HALF_DOWN);
System.out.println("Arrondi à la deuxième décimale: " + format.format(xxx));
}
}
//résultat
Arrondi à la deuxième fraction: 10.6
Arrondi à la deuxième décimale: 10.5
À propos, si vous spécifiez uniquement le nombre à diviser par division, les exceptions suivantes se produiront ... Il semble que la cause en soit que le résultat du calcul soit une fraction circulaire
System.out.println(x.divide(y));
//exception
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1690)
at SampleProgram.main(SampleProgram.java:15)
Il peut être séparé par "_". Le résultat d'affichage n'affecte pas le calcul. Hmm. .. .. Est-il pratique de définir des constantes?
int x = 1_000;
int x = 12;
int y = 5;
double ans = (double)x / (double)y;
--Types primitifs --Même source d'héritage de classe
Utilisez la méthode String.valueOf Comment utiliser Nom de la classe. Nom de la méthode
int x = 1234;
String ss = String.valueOf(x);
Maintenant qu'il s'agit d'un type chaîne, vous pouvez utiliser la méthode length.
public class SampleProgram {
public static void main(String[] args) {
int x;
x = 123 * 234;
System.out.println(String.valueOf(x).length());
}
}
La méthode à appeler pour la classe
Au contraire, la méthode qui appelle l'objet (pour la variable) Cela s'appelle la méthode d'instance.
Y a-t-il du «statique» à distinguer?
Convertissez un type primitif en objet à l'aide d'une classe wrapper.
Type primitif | Classe de wrapper |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
import java.io.IOException;
public class SampleProgram {
public static void main(String[] args) throws IOException {
String x = "123";
String xx = "12.45";
int y;
double yy;
//Le type primitif ne peut pas être affecté au type chaîne
//y = x;
y = Integer.valueOf(x);
System.out.println(y);
yy = Double.valueOf(xx);
System.out.println(yy);
}
}
//résultat
123
12.45
Quand je commence à travailler dans différentes langues, je ne sais pas comment écrire "else if". ..
if(Condition 1) {
}else if(Condition 2) {
}else {
}
opérateur | sens |
---|---|
== | égal |
!= | différent |
> | - |
>= | - |
< | - |
<= | - |
"==" Juge si les objets sont identiques, Utilisez «égal» pour voir si les valeurs sont identiques. "Equals" est fourni pour les types autres que les types primitifs.
(Différence entre le type de référence et le type de base. Le type de base stocke la valeur, mais le type de référence stocke l'adresse de l'objet ... ??)
difficile. ..
public class SampleProgram {
public static void main(String[] args) {
String[] tell = {"090-1234-1234","1234-1234-1234","090-O123-1234"};
/*
*Numéro à 3 chiffres-Numéro à 4 chiffres-Numéro à 4 chiffres
*/
for(int i = 0; i < tell.length; i++) {
System.out.println(tell[i]);
if(tell[i].matches("\\d{3}-\\d{4}-\\d{4}")) {
System.out.println("Bonne réponse");
}else {
System.out.println("Réponse incorrecte");
}
}
}
}
//résultat
090-1234-1234
Bonne réponse
1234-1234-1234
Réponse incorrecte
090-O123-1234
Réponse incorrecte
Je me demande si finalement n'est pas beaucoup utilisé. ..
try{
}catch(Classe d'exception Nom de variable){
}finally{
}
Si une exception se produit à l'intérieur d'une méthode, elle peut être levée hors de la méthode sans l'attraper dans la méthode. Vous devez attraper l'exception à l'extérieur.
Valeur de retour Nom de la méthode(argument)jette un type d'exception{
}
Existe-t-il une syntaxe try-with-resources? .. .. Cela semble être une fonction de Java 7. ~~ Laissons cela pour le moment. .. ~~ On m'a appris à l'utiliser dans les commentaires! Cela peut être pratique.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class SampleProgram {
public static void main(String[] args) {
String fileName1 = "C:\\test3.txt";
String fileName2 = "C:\\test4.txt";
//String fileName1 = null;
try (
FileReader fr = new FileReader(new File(fileName1));
BufferedReader bfr = new BufferedReader(fr);
FileReader fr2 = new FileReader(new File(fileName2));
BufferedReader bfr2 = new BufferedReader(fr2);
)
{
String ss = null;
while((ss = bfr.readLine()) != null) {
System.out.println(ss + "Chargé");
//throw new IOException();
}
}catch(IOException e) {
e.printStackTrace();
}
}
}
//Forme basique
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class SampleProgram {
public static void main(String[] args) {
try {
File file = new File("C:\\test3.txt");
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
String ss = null;
while((ss = bfr.readLine()) != null) {
System.out.println(ss + "Chargé");
}
bfr.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
//résultat
java.io.FileNotFoundException: C:\test3.txt (Le fichier spécifié est introuvable.)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileReader.<init>(FileReader.java:72)
at SampleProgram.main(SampleProgram.java:12)
//Jeter une exception
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class SampleProgram {
public static void main(String[] args) throws IOException {
File file = new File("C:\\test3.txt");
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
String ss = null;
while((ss = bfr.readLine()) != null) {
System.out.println(ss + "Chargé");
}
bfr.close();
}
}
//résultat
Exception in thread "main" java.io.FileNotFoundException: C:\test3.txt (Le fichier spécifié est introuvable.)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileReader.<init>(FileReader.java:72)
at SampleProgram.main(SampleProgram.java:11)
Ce qui est jeté par throw est une instance d'une classe qui hérite de Throwable.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class SampleProgram {
public static void main(String[] args) throws IOException {
try {
File file = new File("C:\\test3.txt");
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
String ss = null;
while((ss = bfr.readLine()) != null) {
System.out.println(ss + "Chargé");
}
bfr.close();
}catch(IOException e) {
IOException ee = new IOException("IOException s'est produite! !!");
throw ee;
}
}
}
//résultat
Exception in thread "main" java.io.IOException:IOException s'est produite! !!
at SampleProgram.main(SampleProgram.java:21)
Si vous souhaitez créer une exception qui n'est pas préparée par vous-même, créez une classe d'exception qui hérite de la classe Exception.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
class myException extends Exception{
myException(String msg) {
super(msg);
}
}
public class SampleProgram {
public static void main(String[] args) throws Exception {
try {
File file = new File("C:\\test3.txt");
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
String ss = null;
while((ss = bfr.readLine()) != null) {
System.out.println(ss + "Chargé");
}
bfr.close();
}catch(Exception e) {
e.printStackTrace();
throw new myException("jeta");
}
}
}
//résultat
java.io.FileNotFoundException: C:\test3.txt (Le fichier spécifié est introuvable.)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileReader.<init>(FileReader.java:72)
at SampleProgram.main(SampleProgram.java:19)
Exception in thread "main" myException:jeta
at SampleProgram.main(SampleProgram.java:29)
Modificateur d'accès Nom de classe(Argument de type argument) {
//Quelque chose de traitement
}
Le constructeur n'est pas hérité.
//Classe parent
class p{
p(){
System.out.println("Constructeur parent 1");
}
p(int x){
System.out.println("Constructeur parent 2");
}
}
//Classe enfant
class c extends p{
}
public class SampleProgram {
public static void main(String[] args) throws Exception {
c cc = new c(10);
c cc = new c();
}
}
c cc = new c(10);
Si Erreur de compilation "Le constructeur c (int) n'est pas défini"
c cc = new c();
alors "Parent constructeur 1" s'affiche Prétendre que le constructeur parent (sans arguments) est hérité Il semble que le compilateur a automatiquement ajouté le constructeur par défaut car rien n'a été déclaré dans la classe enfant.
Je ne sais pas sur la source, mais il semble qu'il soit censé appeler le constructeur parent comme ceci
class c extends p{
c(){
super();
}
}
J'ai essayé d'ajouter un constructeur explicitement à l'enfant, mais pour une raison quelconque, le constructeur parent a également été appelé.
class p{
p(){
System.out.println("Constructeur parent 1");
}
p(int x){
System.out.println("Constructeur parent 2");
}
}
class c extends p{
c(){
System.out.println("Constructeur enfant 1");
}
}
public class SampleProgram {
public static void main(String[] args) throws Exception {
c cc = new c();
}
}
//résultat
Constructeur parent 1
Constructeur enfant 1
Après tout, lorsqu'une classe enfant est instanciée, bien sûr, le constructeur de la classe enfant est exécuté. Cependant, il semble que le constructeur sans l'argument de la classe parent soit appelé sans autorisation avant cela. Je ne peux pas le voir sur la source, mais cela ressemble à ceci.
class c extends p{
c(){
super();★ Peut être attaché par le compilateur
System.out.println("Constructeur enfant 1");
}
}
Hmmm. .. .. Si tu ne le sais pas ..
Une syntaxe qui peut être mémorisée ou détournée par copie
import static java.lang.System.*;
public class SampleProgram{
public static void main(String[] args) {
out.println("hoge");
}
}
Page de la note technique de Hishidama →Java
Recommended Posts