quarta-feira, 27 de maio de 2015

Exceção - código 5

01 /** Causando...
02 
03 */
04 public class DivZero2 {
05    public static void main (String[] args) {
06       int a, b;
07       a=5;
08       b=0;
09       try {
10          a=a/b;
11          //return;
12       catch (Exception e) {
13          System.out.println ("catch " + e.getMessage());
14          return;
15       finally {
16          System.out.println ("finally");
17          return;
18       }
19       // System.out.println ("depois do tratamento..." + a);  // unreachable statement
20    }
21 }
Java2html

Exceção código 4

01 /** Causando...
02 ?? como ver qual o erro??
03 ... capturando ...
04 ... Ã© possível capturar um erro!!!!
05 */
06 public class StackEater2 {
07    public static void main (String[] args) {
08       int a=0, b=0;
09       c(a,b);
10    }
11    static void (int a, int b) {
12       System.out.println ("x");
13       try {
14          c(a,b);
15       catch (Error e) {
16          System.out.println (e.getMessage());
17          System.out.println (e.toString());
18       }
19    }
20 }
Java2html

Exceção - código 3

01 /** Causando...
02 ?? como ver qual o erro??
03 java StackEater 2> err.txt
04 
05 */
06 public class StackEater {
07    public static void main (String[] args) {
08       int a=0, b=0;
09       c(a,b);
10    }
11    static void (int a, int b) {
12       System.out.println ("x");
13       c(a,b);
14    }
15 }
Java2html

Exceção - código 2

01 /** Causando...
02 ?? como ver qual o erro??
03 java StackEater 2> err.txt
04 
05 */
06 public class StackEater {
07    public static void main (String[] args) {
08       int a=0, b=0;
09       c(a,b);
10    }
11    static void (int a, int b) {
12       System.out.println ("x");
13       c(a,b);
14    }
15 }
Java2html

Exceção código 1

01 /** Causando...
02 
03 */
04 public class DivZero {
05    public static void main (String[] args) {
06       int a, b;
07       a=5;
08       b=0;
09       a=a/b;
10       System.out.println (a);
11    }
12 }
Java2html

Array na memória

1 class TestaArray {
2    public static void main (String[] args){
3       int[] arr;
4       arr= new int[10];
5       arr[5]=5;
6    }
7 }
Java2html




Sobre memória

O hardware e instruções para gerenciamento de memória em processadores Intel Core pode ser visto no capítulo 3 do manual do processador:
http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.html

A forma como a memória física é usada por Windows e por Linux pode ser vista em:
http://blog.codinghorror.com/dude-wheres-my-4-gigabytes-of-ram/
http://duartes.org/gustavo/blog/post/motherboard-chipsets-memory-map/
(não encontrei referências no site da Microsoft ou do Linux... a maioria das referências que visitei concordam com as apresentadas)

Agora aumenta a importância do post para nós:

O sistema operacional gerencia a memória física (inclui RAM, HD, swap,...) e quando carrega o executável em memória para que seja executado, expõe aos programas um mapeamento da memória física (que é o espaço de endereçamento virtual):

http://stackoverflow.com/questions/2048007/linux-ia-32-memory-model
http://www.linuxjournal.com/article/4681
http://www.linuxjournal.com/article/6701?page=0,0
http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/

Em especial o exemplo relativo a figura abaixo é bastante ilustrativo do que explico sobre onde (no espaço de endereçamento virtual) ficam armazenados o programa, os literais e as variáveis (estáticas, tipos primitivos e objetos (tipos abstratos)) em aula.

http://static.duartes.org/img/blogPosts/mappingBinaryImage.png

Agora é totalmente nosso território!!!:

Em especial, quando criamos arrays com new e com referência atribuída a uma variável estática, a variável fica no "segmento" de dados e os elementos do array fica no heap.

No escopo de ACH2001 o interesse maior é com a alocação de variáveis (objetos) em memória, geralmente sem preocupação sobre sua localização exata ("segmento" de código, de dados, pilha (stack), heap,...). É suficiente considerar a memória um espaço de armazenamento com endereços.

Relembrando (o pouco que) sabemos sobre compiladores, os identificadores são necessários para facilitar o trabalho do programador. Compiladores substituem identificadores por (algum tipo de) endereço de memória, é suficiente para o programa operar corretamente. Assim, em representações de memória, o identificador é colocado como um rótulo dado a uma posição de memória.